diff options
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 177 |
1 files changed, 175 insertions, 2 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 |