diff options
author | Petr Mrázek <peterix@gmail.com> | 2018-01-22 04:28:07 +0100 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2018-01-27 02:00:20 +0100 |
commit | 166e5a03d63e0b522876bfc072f26f213d5a3a62 (patch) | |
tree | 73b9ec9ab09e4a3fcf5c2c0b0ce6568b0b3e0b9b /application/CMakeLists.txt | |
parent | 0c2e2094ee96ebe8764dd977bd0b5eb254579dcc (diff) | |
download | PrismLauncher-166e5a03d63e0b522876bfc072f26f213d5a3a62.tar.gz PrismLauncher-166e5a03d63e0b522876bfc072f26f213d5a3a62.tar.bz2 PrismLauncher-166e5a03d63e0b522876bfc072f26f213d5a3a62.zip |
NOISSUE rearrange build system
* Added install commands to the libraries instead of force installing files
* Most of the application cmake stuff moved to top level
* RPATH should now be set/cleared correctly
* Contains a fix for GH-1780
Diffstat (limited to 'application/CMakeLists.txt')
-rw-r--r-- | application/CMakeLists.txt | 264 |
1 files changed, 5 insertions, 259 deletions
diff --git a/application/CMakeLists.txt b/application/CMakeLists.txt index 63405a37..1ecbdb6d 100644 --- a/application/CMakeLists.txt +++ b/application/CMakeLists.txt @@ -1,44 +1,6 @@ project(application) -######## Set URLs ######## -set(MultiMC_NEWS_RSS_URL "http://multimc.org/rss.xml" CACHE STRING "URL to fetch MultiMC's news RSS feed from.") - -######## Set version numbers ######## -set(MultiMC_VERSION_MAJOR 0) -set(MultiMC_VERSION_MINOR 6) -set(MultiMC_VERSION_HOTFIX 0) - -# Build number -set(MultiMC_VERSION_BUILD -1 CACHE STRING "Build number. -1 for no build number.") - -# Build platform. -set(MultiMC_BUILD_PLATFORM "" CACHE STRING "A short string identifying the platform that this build was built for. Only used by the notification system and to display in the about dialog.") - -# Channel list URL -set(MultiMC_CHANLIST_URL "" CACHE STRING "URL for the channel list.") - -# Notification URL -set(MultiMC_NOTIFICATION_URL "" CACHE STRING "URL for checking for notifications.") - -# paste.ee API key -set(MultiMC_PASTE_EE_API_KEY "" CACHE STRING "API key you can get from paste.ee when you register an account") - -# Google analytics ID -set(MultiMC_ANALYTICS_ID "" CACHE STRING "ID you can get from Google analytics") - -#### Check the current Git commit and branch -include(GetGitRevisionDescription) -get_git_head_revision(MultiMC_GIT_REFSPEC MultiMC_GIT_COMMIT) - -message(STATUS "Git commit: ${MultiMC_GIT_COMMIT}") -message(STATUS "Git refspec: ${MultiMC_GIT_REFSPEC}") - -set(MultiMC_RELEASE_VERSION_NAME "${MultiMC_VERSION_MAJOR}.${MultiMC_VERSION_MINOR}.${MultiMC_VERSION_HOTFIX}") - -#### Custom target to just print the version. -add_custom_target(version echo "Version: ${MultiMC_RELEASE_VERSION_NAME}") - -######## Configure header ######## +######## Configure the file with build properties ######## configure_file("${PROJECT_SOURCE_DIR}/BuildConfig.cpp.in" "${PROJECT_BINARY_DIR}/BuildConfig.cpp") ################################ FILES ################################ @@ -298,231 +260,15 @@ qt5_add_resources(MULTIMC_RESOURCES ${MULTIMC_QRCS}) # Add executable add_executable(MultiMC MACOSX_BUNDLE WIN32 ${MULTIMC_SOURCES} ${MULTIMC_UI} ${MULTIMC_RESOURCES} ${MULTIMC_RCS}) target_link_libraries(MultiMC MultiMC_gui ${QUAZIP_LIBRARIES} hoedown MultiMC_rainbow LocalPeer ganalytics) - -################################ INSTALLATION AND PACKAGING ################################ - -######## Packaging/install paths setup ######## - -# How to install the build results -set(MultiMC_LAYOUT "auto" CACHE STRING "The layout for MultiMC installation (auto, win-bundle, lin-bundle, lin-nodeps, lin-system, mac-bundle)") -set_property(CACHE MultiMC_LAYOUT PROPERTY STRINGS auto win-bundle lin-bundle lin-nodeps lin-system mac-bundle) - -if(MultiMC_LAYOUT STREQUAL "auto") - if(UNIX AND APPLE) - set(MultiMC_LAYOUT_REAL "mac-bundle") - elseif(UNIX) - set(MultiMC_LAYOUT_REAL "lin-nodeps") - elseif(WIN32) - set(MultiMC_LAYOUT_REAL "win-bundle") - else() - message(FATAL_ERROR "Cannot choose a sensible install layout for your platform.") - endif() -else() - set(MultiMC_LAYOUT_REAL ${MultiMC_LAYOUT}) +if(DEFINED MultiMC_APP_BINARY_NAME) + set_target_properties(MultiMC PROPERTIES OUTPUT_NAME "${MultiMC_APP_BINARY_NAME}") endif() - -if(MultiMC_LAYOUT_REAL STREQUAL "mac-bundle") - set(BINARY_DEST_DIR "MultiMC.app/Contents/MacOS") - set(LIBRARY_DEST_DIR "MultiMC.app/Contents/MacOS") - set(PLUGIN_DEST_DIR "MultiMC.app/Contents/MacOS") - set(RESOURCES_DEST_DIR "MultiMC.app/Contents/Resources") - set(JARS_DEST_DIR "MultiMC.app/Contents/MacOS") - - set(BUNDLE_DEST_DIR ".") - - # Apps to bundle - set(APPS "\${CMAKE_INSTALL_PREFIX}/MultiMC.app") - - # Mac bundle settings - set(MACOSX_BUNDLE_BUNDLE_NAME "MultiMC") - set(MACOSX_BUNDLE_INFO_STRING "MultiMC Minecraft launcher and management utility.") - set(MACOSX_BUNDLE_GUI_IDENTIFIER "org.multimc.MultiMC5") - set(MACOSX_BUNDLE_BUNDLE_VERSION "${MultiMC_VERSION_MAJOR}.${MultiMC_VERSION_MINOR}.${MultiMC_VERSION_HOTFIX}.${MultiMC_VERSION_BUILD}") - set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${MultiMC_VERSION_MAJOR}.${MultiMC_VERSION_MINOR}.${MultiMC_VERSION_HOTFIX}.${MultiMC_VERSION_BUILD}") - set(MACOSX_BUNDLE_LONG_VERSION_STRING "${MultiMC_VERSION_MAJOR}.${MultiMC_VERSION_MINOR}.${MultiMC_VERSION_HOTFIX}.${MultiMC_VERSION_BUILD}") - set(MACOSX_BUNDLE_ICON_FILE MultiMC.icns) - set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2015-2017 MultiMC Contributors") - - # directories to look for dependencies - set(DIRS ${QT_LIBS_DIR} ${QT_LIBEXECS_DIR} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) - - # install as bundle - set(INSTALL_BUNDLE "full") - - # Add the icon - install(FILES resources/MultiMC.icns DESTINATION ${RESOURCES_DEST_DIR}) - -elseif(MultiMC_LAYOUT_REAL STREQUAL "lin-bundle") - set(BINARY_DEST_DIR "bin") - set(LIBRARY_DEST_DIR "bin") - set(PLUGIN_DEST_DIR "plugins") - set(BUNDLE_DEST_DIR ".") - set(RESOURCES_DEST_DIR ".") - set(JARS_DEST_DIR "bin") - - # Apps to bundle - set(APPS "\${CMAKE_INSTALL_PREFIX}/bin/MultiMC") - - # directories to look for dependencies - set(DIRS ${QT_LIBS_DIR} ${QT_LIBEXECS_DIR} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) - - # install as bundle - set(INSTALL_BUNDLE "full") - - # Set RPATH - SET_TARGET_PROPERTIES(MultiMC PROPERTIES INSTALL_RPATH "$ORIGIN/") - - # Install basic runner script - install(PROGRAMS package/linux/MultiMC DESTINATION ${BUNDLE_DEST_DIR}) - -elseif(MultiMC_LAYOUT_REAL STREQUAL "lin-nodeps") - set(BINARY_DEST_DIR "bin") - set(LIBRARY_DEST_DIR "bin") - set(PLUGIN_DEST_DIR "plugins") - set(BUNDLE_DEST_DIR ".") - set(RESOURCES_DEST_DIR ".") - set(JARS_DEST_DIR "bin") - - # install as bundle with no dependencies included - set(INSTALL_BUNDLE "nodeps") - - # Set RPATH - SET_TARGET_PROPERTIES(MultiMC PROPERTIES INSTALL_RPATH "$ORIGIN/") - - # Install basic runner script - install(PROGRAMS package/linux/MultiMC DESTINATION ${BUNDLE_DEST_DIR}) - -elseif(MultiMC_LAYOUT_REAL STREQUAL "lin-system") - set(MultiMC_BINARY_DEST_DIR "bin" CACHE STRING "Path to the binary directory") - set(MultiMC_LIBRARY_DEST_DIR "lib${LIB_SUFFIX}" CACHE STRING "Path to the library directory") - set(MultiMC_SHARE_DEST_DIR "share/multimc" CACHE STRING "Path to the shared data directory") - set(MultiMC_APP_BINARY_NAME "multimc" CACHE STRING "Name of the MultiMC binary for the purposes of linux packaging") - set(JARS_DEST_DIR "${MultiMC_SHARE_DEST_DIR}") - - set(BINARY_DEST_DIR ${MultiMC_BINARY_DEST_DIR}) - set(LIBRARY_DEST_DIR ${MultiMC_LIBRARY_DEST_DIR}) - - MESSAGE(STATUS "Compiling for linux system with ${MultiMC_SHARE_DEST_DIR} and MULTIMC_LINUX_DATADIR") - set_target_properties(MultiMC PROPERTIES OUTPUT_NAME ${MultiMC_APP_BINARY_NAME}) - target_compile_definitions(MultiMC PRIVATE "-DMULTIMC_JARS_LOCATION=${CMAKE_INSTALL_PREFIX}/${MultiMC_SHARE_DEST_DIR}/jars" "-DMULTIMC_LINUX_DATADIR" - ) - - # install as bundle with no dependencies included - set(INSTALL_BUNDLE "nodeps") - -elseif(MultiMC_LAYOUT_REAL STREQUAL "win-bundle") - set(BINARY_DEST_DIR ".") - set(LIBRARY_DEST_DIR ".") - set(PLUGIN_DEST_DIR ".") - set(BUNDLE_DEST_DIR ".") - set(RESOURCES_DEST_DIR ".") - set(JARS_DEST_DIR ".") - - # Apps to bundle - set(APPS "\${CMAKE_INSTALL_PREFIX}/MultiMC.exe") - - # directories to look for dependencies - set(DIRS ${QT_LIBS_DIR} ${QT_LIBEXECS_DIR} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) - - # install as bundle - set(INSTALL_BUNDLE "full") -else() - message(FATAL_ERROR "No sensible install layout set.") +if(DEFINED MultiMC_BINARY_RPATH) + SET_TARGET_PROPERTIES(MultiMC PROPERTIES INSTALL_RPATH "${MultiMC_BINARY_RPATH}") endif() -######## Install files ######## - -#### Executable #### install(TARGETS MultiMC BUNDLE DESTINATION ${BUNDLE_DEST_DIR} COMPONENT Runtime LIBRARY DESTINATION ${LIBRARY_DEST_DIR} COMPONENT Runtime RUNTIME DESTINATION ${BINARY_DEST_DIR} COMPONENT Runtime ) - -install_jar(JavaCheck "${JARS_DEST_DIR}/jars") -install_jar(NewLaunch "${JARS_DEST_DIR}/jars") - -#### Dependency installations #### -if(INSTALL_BUNDLE STREQUAL "nodeps") - # Just our own stuff - # FIXME: this does not remove RPATH. - install( - FILES - $<TARGET_FILE:MultiMC_gui> - $<TARGET_FILE:MultiMC_logic> - $<TARGET_FILE:MultiMC_rainbow> - $<TARGET_FILE:MultiMC_quazip> - $<TARGET_FILE:MultiMC_iconfix> - $<TARGET_FILE:MultiMC_unpack200> - $<TARGET_FILE:MultiMC_nbt++> - DESTINATION - ${LIBRARY_DEST_DIR} - ) -elseif(INSTALL_BUNDLE STREQUAL "full") - # Add qt.conf - this makes Qt stop looking for things outside the bundle - install( - CODE "file(WRITE \"\${CMAKE_INSTALL_PREFIX}/${RESOURCES_DEST_DIR}/qt.conf\" \" \")" - COMPONENT Runtime - ) - # Bundle plugins - if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") - # Image formats - install( - DIRECTORY "${QT_PLUGINS_DIR}/imageformats" - DESTINATION ${PLUGIN_DEST_DIR} - COMPONENT Runtime - REGEX "tga|tiff|mng|webp" EXCLUDE - ) - # Icon engines - install( - DIRECTORY "${QT_PLUGINS_DIR}/iconengines" - DESTINATION ${PLUGIN_DEST_DIR} - COMPONENT Runtime - REGEX "fontawesome" EXCLUDE - ) - # Platform plugins - install( - DIRECTORY "${QT_PLUGINS_DIR}/platforms" - DESTINATION ${PLUGIN_DEST_DIR} - COMPONENT Runtime - REGEX "minimal|linuxfb|offscreen" EXCLUDE - ) - else() - # Image formats - install( - DIRECTORY "${QT_PLUGINS_DIR}/imageformats" - DESTINATION ${PLUGIN_DEST_DIR} - COMPONENT Runtime - REGEX "tga|tiff|mng|webp" EXCLUDE - REGEX "d\\." EXCLUDE - REGEX "_debug\\." EXCLUDE - REGEX "\\.dSYM" EXCLUDE - ) - # Icon engines - install( - DIRECTORY "${QT_PLUGINS_DIR}/iconengines" - DESTINATION ${PLUGIN_DEST_DIR} - COMPONENT Runtime - REGEX "fontawesome" EXCLUDE - REGEX "d\\." EXCLUDE - REGEX "_debug\\." EXCLUDE - REGEX "\\.dSYM" EXCLUDE - ) - # Platform plugins - install( - DIRECTORY "${QT_PLUGINS_DIR}/platforms" - DESTINATION ${PLUGIN_DEST_DIR} - COMPONENT Runtime - REGEX "minimal|linuxfb|offscreen" EXCLUDE - REGEX "d\\." EXCLUDE - REGEX "_debug\\." EXCLUDE - REGEX "\\.dSYM" EXCLUDE - ) - endif() - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/install_prereqs.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/install_prereqs.cmake" - @ONLY - ) - install(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/install_prereqs.cmake" COMPONENT Runtime) -endif() |