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 | |
parent | 0c2e2094ee96ebe8764dd977bd0b5eb254579dcc (diff) | |
download | MultiMC-166e5a03d63e0b522876bfc072f26f213d5a3a62.tar MultiMC-166e5a03d63e0b522876bfc072f26f213d5a3a62.tar.gz MultiMC-166e5a03d63e0b522876bfc072f26f213d5a3a62.tar.lz MultiMC-166e5a03d63e0b522876bfc072f26f213d5a3a62.tar.xz MultiMC-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
-rw-r--r-- | CMakeLists.txt | 177 | ||||
-rw-r--r-- | api/gui/CMakeLists.txt | 3 | ||||
-rw-r--r-- | api/logic/CMakeLists.txt | 3 | ||||
-rw-r--r-- | application/CMakeLists.txt | 264 | ||||
-rw-r--r-- | bundle/CMakeLists.txt | 68 | ||||
-rw-r--r-- | bundle/install_prereqs.cmake.in (renamed from application/install_prereqs.cmake.in) | 0 | ||||
-rw-r--r-- | cmake/BundleUtilities.cmake | 2 | ||||
-rw-r--r-- | cmake/GetPrerequisites.cmake | 7 | ||||
-rw-r--r-- | libraries/iconfix/CMakeLists.txt | 3 | ||||
-rw-r--r-- | libraries/javacheck/CMakeLists.txt | 1 | ||||
-rw-r--r-- | libraries/launcher/CMakeLists.txt | 2 | ||||
m--------- | libraries/libnbtplusplus | 0 | ||||
-rw-r--r-- | libraries/pack200/CMakeLists.txt | 3 | ||||
m--------- | libraries/quazip | 0 | ||||
-rw-r--r-- | libraries/rainbow/CMakeLists.txt | 3 |
15 files changed, 273 insertions, 263 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 761ce347..78323966 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,7 @@ endif() project(MultiMC) enable_testing() -######## Set CMake options ######## +##################################### Set CMake options ##################################### set(CMAKE_AUTOMOC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) @@ -38,6 +38,173 @@ if(UNIX AND APPLE) endif() set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Werror=return-type") +##################################### Set Application options ##################################### + +######## 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}") + +####################################### Install layout ####################################### + +# 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}) +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/jars") + + 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 application/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/jars") + + # 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(MultiMC_BINARY_RPATH "$ORIGIN/") + + # Install basic runner script + install(PROGRAMS application/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/jars") + + # install as bundle with no dependencies included + set(INSTALL_BUNDLE "nodeps") + + # Set RPATH + SET(MultiMC_BINARY_RPATH "$ORIGIN/") + + # Install basic runner script + install(PROGRAMS application/package/linux/MultiMC DESTINATION ${BUNDLE_DEST_DIR}) + +elseif(MultiMC_LAYOUT_REAL STREQUAL "lin-system") + set(MultiMC_APP_BINARY_NAME "multimc" CACHE STRING "Name of the MultiMC binary") + 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(JARS_DEST_DIR "${MultiMC_SHARE_DEST_DIR}/jars") + + 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") + target_compile_definitions(MultiMC PRIVATE "-DMULTIMC_JARS_LOCATION=${CMAKE_INSTALL_PREFIX}/${JARS_DEST_DIR}" "-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 "jars") + + # 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.") +endif() + ################################ 3rd Party Libs ################################ @@ -71,6 +238,7 @@ option(NBT_BUILD_SHARED "Build NBT shared library" ON) option(NBT_USE_ZLIB "Build NBT library with zlib support" OFF) option(NBT_BUILD_TESTS "Build NBT library tests" OFF) #FIXME: fix unit tests. set(NBT_NAME MultiMC_nbt++) +set(NBT_DEST_DIR ${LIBRARY_DEST_DIR}) add_subdirectory(libraries/libnbtplusplus) add_subdirectory(libraries/ganalytics) # google analytics library @@ -90,5 +258,10 @@ add_subdirectory(libraries/classparser) # google analytics library add_subdirectory(api/logic) add_subdirectory(api/gui) - add_subdirectory(application) + +# Bundle utilities are used to complete the portable packages - they add all the libraries that would otherwise be missing on the target system. +# NOTE: this must always be last to appease the CMake deity of quirky install command evaluation order. +if(INSTALL_BUNDLE STREQUAL "full") + add_subdirectory(bundle) +endif()
\ No newline at end of file diff --git a/api/gui/CMakeLists.txt b/api/gui/CMakeLists.txt index 911a0ab8..0e8cc683 100644 --- a/api/gui/CMakeLists.txt +++ b/api/gui/CMakeLists.txt @@ -26,3 +26,6 @@ qt5_use_modules(MultiMC_gui Gui) # Mark and export headers target_include_directories(MultiMC_gui PUBLIC "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}") + +# Install it +install(TARGETS MultiMC_gui DESTINATION ${LIBRARY_DEST_DIR}) diff --git a/api/logic/CMakeLists.txt b/api/logic/CMakeLists.txt index 8a8ef495..b835ee97 100644 --- a/api/logic/CMakeLists.txt +++ b/api/logic/CMakeLists.txt @@ -459,3 +459,6 @@ qt5_use_modules(MultiMC_logic Core Xml Network Concurrent) # Mark and export headers target_include_directories(MultiMC_logic PUBLIC "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}" PRIVATE "${ZLIB_INCLUDE_DIRS}") + +# Install it +install(TARGETS MultiMC_logic DESTINATION ${LIBRARY_DEST_DIR}) 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() diff --git a/bundle/CMakeLists.txt b/bundle/CMakeLists.txt new file mode 100644 index 00000000..80760f77 --- /dev/null +++ b/bundle/CMakeLists.txt @@ -0,0 +1,68 @@ +#### The MultiMC bundle mess! #### + +# 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) diff --git a/application/install_prereqs.cmake.in b/bundle/install_prereqs.cmake.in index 2906a4ec..2906a4ec 100644 --- a/application/install_prereqs.cmake.in +++ b/bundle/install_prereqs.cmake.in diff --git a/cmake/BundleUtilities.cmake b/cmake/BundleUtilities.cmake index 0f6cd059..e3f50b94 100644 --- a/cmake/BundleUtilities.cmake +++ b/cmake/BundleUtilities.cmake @@ -301,7 +301,7 @@ function(get_bundle_and_executable app bundle_var executable_var valid_var) endif() endif() else() - message(STATUS "warning: *NOT* handled - directory/file does not exist...") + message(STATUS "warning: *NOT* handled - directory/file ${app} does not exist...") endif() if(NOT valid) diff --git a/cmake/GetPrerequisites.cmake b/cmake/GetPrerequisites.cmake index d782ced9..39c2cc63 100644 --- a/cmake/GetPrerequisites.cmake +++ b/cmake/GetPrerequisites.cmake @@ -205,6 +205,13 @@ function(is_file_executable file result_var) return() endif() + # "file" version 5.22 does not print "(used shared libraries)" + # but uses "interpreter" + if("${file_ov}" MATCHES "shared object.*interpreter") + set(${result_var} 1 PARENT_SCOPE) + return() + endif() + else() message(STATUS "warning: No 'file' command, skipping execute_process...") endif() diff --git a/libraries/iconfix/CMakeLists.txt b/libraries/iconfix/CMakeLists.txt index 6a99effe..2a9f37f8 100644 --- a/libraries/iconfix/CMakeLists.txt +++ b/libraries/iconfix/CMakeLists.txt @@ -19,3 +19,6 @@ qt5_use_modules(MultiMC_iconfix Core Widgets) set_target_properties(MultiMC_iconfix PROPERTIES CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN 1) generate_export_header(MultiMC_iconfix) + +# Install it +install(TARGETS MultiMC_iconfix DESTINATION ${LIBRARY_DEST_DIR}) diff --git a/libraries/javacheck/CMakeLists.txt b/libraries/javacheck/CMakeLists.txt index 9768650e..381efe08 100644 --- a/libraries/javacheck/CMakeLists.txt +++ b/libraries/javacheck/CMakeLists.txt @@ -11,3 +11,4 @@ set(SRC ) add_jar(JavaCheck ${SRC}) +install_jar(JavaCheck "${JARS_DEST_DIR}") diff --git a/libraries/launcher/CMakeLists.txt b/libraries/launcher/CMakeLists.txt index e468904c..a4f52edb 100644 --- a/libraries/launcher/CMakeLists.txt +++ b/libraries/launcher/CMakeLists.txt @@ -18,4 +18,4 @@ set(SRC net/minecraft/Launcher.java ) add_jar(NewLaunch ${SRC}) - +install_jar(NewLaunch "${JARS_DEST_DIR}") diff --git a/libraries/libnbtplusplus b/libraries/libnbtplusplus -Subproject 4b305bbd2ac0e7a26987baf7949a484a87b474d +Subproject c3ec5b3bc76f63c0de93d29077e3fc67e622279 diff --git a/libraries/pack200/CMakeLists.txt b/libraries/pack200/CMakeLists.txt index 359445d2..c9e05fbd 100644 --- a/libraries/pack200/CMakeLists.txt +++ b/libraries/pack200/CMakeLists.txt @@ -37,6 +37,9 @@ target_link_libraries(MultiMC_unpack200 ${ZLIB_LIBRARIES}) set_target_properties(MultiMC_unpack200 PROPERTIES CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN 1) generate_export_header(MultiMC_unpack200) +# Install it +install(TARGETS MultiMC_unpack200 DESTINATION ${LIBRARY_DEST_DIR}) + if(PACK200_BUILD_BINARY) add_executable(anti200 anti200.cpp) target_link_libraries(anti200 MultiMC_unpack200) diff --git a/libraries/quazip b/libraries/quazip -Subproject 164acc35fd5f77d353161dcf1c4e121bc2ce756 +Subproject 4747be9520dd55ed226ebe553403bde3bf660ca diff --git a/libraries/rainbow/CMakeLists.txt b/libraries/rainbow/CMakeLists.txt index 15019a71..826c9938 100644 --- a/libraries/rainbow/CMakeLists.txt +++ b/libraries/rainbow/CMakeLists.txt @@ -13,3 +13,6 @@ add_library(MultiMC_rainbow SHARED ${RAINBOW_SOURCES}) target_include_directories(MultiMC_rainbow PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include") qt5_use_modules(MultiMC_rainbow Core Gui) + +# Install it +install(TARGETS MultiMC_rainbow DESTINATION ${LIBRARY_DEST_DIR}) |