Add CMake buildsystem

master
Unknown 2019-03-15 16:56:28 +01:00 committed by adrido
parent 1ac4fed264
commit a2277a972d
3 changed files with 247 additions and 0 deletions

171
CMakeLists.txt Normal file
View File

@ -0,0 +1,171 @@
cmake_minimum_required(VERSION 3.12)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
set(USE_FOLDERS ON)
include(getGitVersion)
project(MinetestMapperGUI
VERSION ${git_version_major}.${git_version_minor}.${git_version_patch}.${git_commits_since_last_tag}
DESCRIPTION "Graphical userinterface for Minetestmapper"
LANGUAGES CXX)
message(STATUS "Version: ${PROJECT_VERSION}.")
if(MSVC_VERSION GREATER_EQUAL 1900)
# MSVC does not support c++ 11 but c++ 14
set(CMAKE_CXX_STANDARD 14)
else()
set(CMAKE_CXX_STANDARD 11)
endif()
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(SOURCES
main.cpp
mainwindow.cpp
colorlineedit.cpp
geometry.cpp
geometrywidget.cpp
configdialog.cpp
makecolors.cpp
drawmapfigure.cpp
drawmapfiguretablemodel.cpp
figuredelegate.cpp
minetestmapperexe.cpp
colorstxtwizard.cpp
)
set(HEADERS
mainwindow.h
colorlineedit.h
geometry.h
geometrywidget.h
configdialog.h
makecolors.h
drawmapfigure.h
drawmapfiguretablemodel.h
figuredelegate.h
minetestmapperexe.h
colorstxtwizard.h
)
set(FORMS
mainwindow.ui
geometrywidget.ui
configdialog.ui
)
set(RESOURCES
minetestmappergui.qrc
)
set(TRANSLATIONS
translations/gui_de.ts
translations/gui_en.ts
)
include(getGitVersion)
if(${git_commits_since_last_tag} EQUAL 0)
set (PRERELEASE 0)
else()
set (PRERELEASE 1)
endif()
set(BUILD_BRANCH ${git_current_branch})
if(BUILD_BRANCH STREQUAL "master")
set (SPECIALBUILD 0)
else()
set (SPECIALBUILD 1)
endif()
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
configure_file(MinetestMapperGui.in.rc MinetestMapperGui.rc)
source_group("UI Files" FILES ${FORMS})
find_package(Qt5LinguistTools REQUIRED)
set_source_files_properties(${TRANSLATIONS} PROPERTIES OUTPUT_LOCATION "translations/")
qt5_create_translation(QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} ${TRANSLATIONS})
add_executable(MinetestMapperGUI ${SOURCES} ${HEADERS} ${FORMS} ${RESOURCES} ${QM_FILES} ${CMAKE_CURRENT_BINARY_DIR}/MinetestMapperGui.rc)
find_package(Qt5 COMPONENTS Core Gui Widgets)
target_link_libraries(MinetestMapperGUI Qt5::Core Qt5::Gui Qt5::Widgets)
if(WIN32)
find_package(Qt5WinExtras CONFIG REQUIRED)
target_link_libraries(MinetestMapperGUI Qt5::WinExtras)
# Get rid of the console window
set_target_properties(MinetestMapperGUI PROPERTIES WIN32_EXECUTABLE TRUE)
endif()
target_compile_definitions(MinetestMapperGUI PRIVATE GIT_VERSION="${PROJECT_VERSION}")
if(WIN32)
# Get the location of the qmake exe
get_target_property(qmake_executable Qt5::qmake IMPORTED_LOCATION)
# Get the dir of it
get_filename_component(qt_bin_dir "${qmake_executable}" DIRECTORY)
message(STATUS "qt_bin_dir: ${qt_bin_dir}")
find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${qt_bin_dir}")
message(STATUS "WINDEPLOYQT_EXECUTABLE: ${WINDEPLOYQT_EXECUTABLE}")
add_custom_command(TARGET MinetestMapperGUI POST_BUILD
COMMAND ${WINDEPLOYQT_EXECUTABLE} $<TARGET_FILE:MinetestMapperGUI>
--dir "${CMAKE_CURRENT_BINARY_DIR}"
--libdir $<TARGET_FILE_DIR:MinetestMapperGUI>
--plugindir $<TARGET_FILE_DIR:MinetestMapperGUI>
--no-compiler-runtime
--no-opengl-sw
--no-angle
WORKING_DIRECTORY ${qt_bin_dir}
COMMENT "Running windeployqt..."
)
configure_file(mtmapperenv.bat mtmapperenv.bat COPYONLY)
endif()
# Installation
###############################################################################
set (CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION ".")
include (InstallRequiredSystemLibraries)
INSTALL(TARGETS MinetestMapperGUI
RUNTIME DESTINATION .
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/translations/
DESTINATION "translations"
FILES_MATCHING PATTERN "*.qm"
)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/translations/
DESTINATION "translations"
FILES_MATCHING PATTERN "*.png"
)
if(WIN32)
#copy required dlls to install dir
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Release/
DESTINATION .
CONFIGURATIONS Release
FILES_MATCHING PATTERN "*.dll")
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Debug/
DESTINATION .
CONFIGURATIONS Debug
FILES_MATCHING PATTERN "*.dll")
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/RelWithDebInfo/
DESTINATION .
CONFIGURATIONS RelWithDebInfo
FILES_MATCHING PATTERN "*.dll")
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/MinSizeRel/
DESTINATION .
CONFIGURATIONS RelWithDebInfo
FILES_MATCHING PATTERN "*.dll")
endif(WIN32)

37
MinetestMapperGui.in.rc Normal file
View File

@ -0,0 +1,37 @@
#include <windows.h>
IDI_ICON1 ICON DISCARDABLE "${CMAKE_CURRENT_SOURCE_DIR}/images/icon.ico"
VS_VERSION_INFO VERSIONINFO
FILEVERSION ${PROJECT_VERSION_MAJOR},${PROJECT_VERSION_MINOR},${PROJECT_VERSION_PATCH},${PROJECT_VERSION_TWEAK}
PRODUCTVERSION ${CMAKE_PROJECT_VERSION_MAJOR},${CMAKE_PROJECT_VERSION_MINOR},${CMAKE_PROJECT_VERSION_PATCH},${CMAKE_PROJECT_VERSION_TWEAK}
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
#else
FILEFLAGS 0x0L
#endif
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "04b004b0"
BEGIN
VALUE "CompanyName", "\0"
VALUE "FileDescription", "${PROJECT_DESCRIPTION}\0"
VALUE "FileVersion", "${PROJECT_VERSION}\0"
VALUE "LegalCopyright", "2015-2019 addi; CC BY\0"
VALUE "OriginalFilename", "{PROJECT_NAME}.exe\0"
VALUE "ProductName", "${PROJECT_NAME}\0"
VALUE "ProductVersion", "${CMAKE_PROJECT_VERSION}\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x04b0, 1200
END
END
/* End of Version info */

39
cmake/getGitVersion.cmake Normal file
View File

@ -0,0 +1,39 @@
find_package(Git REQUIRED)
execute_process(
COMMAND "${GIT_EXECUTABLE}" describe --long --dirty --tags --match v[0-9]*
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE git_result
OUTPUT_VARIABLE git_tag
ERROR_VARIABLE git_error
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_STRIP_TRAILING_WHITESPACE
)
if( NOT git_result EQUAL 0 )
message( FATAL_ERROR "Failed to execute Git: ${git_error}" )
endif()
if( git_tag MATCHES "v([0-9]+).([0-9]+).([0-9]+)-([0-9]+)-g([0-9,a-f]+)(-dirty)?" )
set( git_version_major "${CMAKE_MATCH_1}" )
set( git_version_minor "${CMAKE_MATCH_2}" )
set( git_version_patch "${CMAKE_MATCH_3}" )
set( git_commits_since_last_tag "${CMAKE_MATCH_4}" )
set( git_hash "${CMAKE_MATCH_5}" )
set( git_wip "${CMAKE_MATCH_6}" )
else()
message( FATAL_ERROR "Git tag isn't valid semantic version: [${git_tag}]" )
endif()
execute_process(
COMMAND "${GIT_EXECUTABLE}" rev-parse --abbrev-ref HEAD
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE git_result
OUTPUT_VARIABLE git_current_branch
ERROR_VARIABLE git_error
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_STRIP_TRAILING_WHITESPACE
)
if( NOT git_result EQUAL 0 )
message( FATAL_ERROR "Failed to execute Git: ${git_error}" )
endif()