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
This commit is contained in:
		
							
								
								
									
										177
									
								
								CMakeLists.txt
									
									
									
									
									
								
							
							
						
						
									
										177
									
								
								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() | ||||
| @@ -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}) | ||||
|   | ||||
| @@ -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}) | ||||
|   | ||||
| @@ -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(DEFINED MultiMC_BINARY_RPATH) | ||||
| 	SET_TARGET_PROPERTIES(MultiMC PROPERTIES INSTALL_RPATH "${MultiMC_BINARY_RPATH}") | ||||
| 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.") | ||||
| 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() | ||||
|   | ||||
							
								
								
									
										68
									
								
								bundle/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								bundle/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -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) | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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() | ||||
|   | ||||
| @@ -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}) | ||||
|   | ||||
| @@ -11,3 +11,4 @@ set(SRC | ||||
| ) | ||||
|  | ||||
| add_jar(JavaCheck ${SRC}) | ||||
| install_jar(JavaCheck "${JARS_DEST_DIR}") | ||||
|   | ||||
| @@ -18,4 +18,4 @@ set(SRC | ||||
| 	net/minecraft/Launcher.java | ||||
| ) | ||||
| add_jar(NewLaunch ${SRC}) | ||||
|  | ||||
| install_jar(NewLaunch "${JARS_DEST_DIR}") | ||||
|   | ||||
 Submodule libraries/libnbtplusplus updated: 4b305bbd2a...c3ec5b3bc7
									
								
							| @@ -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) | ||||
|   | ||||
 Submodule libraries/quazip updated: 164acc35fd...4747be9520
									
								
							| @@ -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}) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user