summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2018-01-22 04:28:07 +0100
committerPetr Mrázek <peterix@gmail.com>2018-01-27 02:00:20 +0100
commit166e5a03d63e0b522876bfc072f26f213d5a3a62 (patch)
tree73b9ec9ab09e4a3fcf5c2c0b0ce6568b0b3e0b9b
parent0c2e2094ee96ebe8764dd977bd0b5eb254579dcc (diff)
downloadMultiMC-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.txt177
-rw-r--r--api/gui/CMakeLists.txt3
-rw-r--r--api/logic/CMakeLists.txt3
-rw-r--r--application/CMakeLists.txt264
-rw-r--r--bundle/CMakeLists.txt68
-rw-r--r--bundle/install_prereqs.cmake.in (renamed from application/install_prereqs.cmake.in)0
-rw-r--r--cmake/BundleUtilities.cmake2
-rw-r--r--cmake/GetPrerequisites.cmake7
-rw-r--r--libraries/iconfix/CMakeLists.txt3
-rw-r--r--libraries/javacheck/CMakeLists.txt1
-rw-r--r--libraries/launcher/CMakeLists.txt2
m---------libraries/libnbtplusplus0
-rw-r--r--libraries/pack200/CMakeLists.txt3
m---------libraries/quazip0
-rw-r--r--libraries/rainbow/CMakeLists.txt3
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})