Add CMake buildsystem
parent
1ac4fed264
commit
a2277a972d
|
@ -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)
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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()
|
Loading…
Reference in New Issue