2022-02-04 03:41:10 +05:30
cmake_minimum_required ( VERSION 3.15 ) # minimum version required by QuaZip
2013-09-26 17:19:58 +05:30
2021-11-03 20:15:42 +05:30
project ( Launcher )
2014-04-06 21:42:48 +05:30
string ( COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_BUILD_DIR}" IS_IN_SOURCE_BUILD )
if ( IS_IN_SOURCE_BUILD )
2021-10-13 05:29:25 +05:30
message ( FATAL_ERROR "You are building the Launcher in-source. Please separate the build tree from the source tree." )
2020-05-29 02:47:50 +05:30
endif ( )
2018-01-22 08:58:07 +05:30
##################################### Set CMake options #####################################
2014-04-06 23:13:09 +05:30
set ( CMAKE_AUTOMOC ON )
2022-01-01 03:06:59 +05:30
set ( CMAKE_AUTORCC ON )
2014-04-06 23:13:09 +05:30
set ( CMAKE_INCLUDE_CURRENT_DIR ON )
2013-01-11 06:55:40 +05:30
2014-04-06 23:13:09 +05:30
set ( CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/" )
2015-09-29 00:23:46 +05:30
2016-05-01 07:19:46 +05:30
# Output all executables and shared libs in the main build folder, not in subfolders.
set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ PROJECT_BINARY_DIR } )
if ( UNIX )
2018-07-15 18:21:05 +05:30
set ( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ PROJECT_BINARY_DIR } )
2016-05-01 07:19:46 +05:30
endif ( )
2016-03-13 05:14:37 +05:30
set ( CMAKE_JAVA_TARGET_OUTPUT_DIR ${ PROJECT_BINARY_DIR } /jars )
2014-01-11 06:36:22 +05:30
2013-02-22 00:05:33 +05:30
######## Set compiler flags ########
2015-09-29 00:23:46 +05:30
set ( CMAKE_CXX_STANDARD_REQUIRED true )
set ( CMAKE_C_STANDARD_REQUIRED true )
2022-07-20 17:51:44 +05:30
set ( CMAKE_CXX_STANDARD 17 )
2022-07-30 20:05:48 +05:30
set ( CMAKE_C_STANDARD 11 )
2015-09-05 22:16:57 +05:30
include ( GenerateExportHeader )
2022-10-26 06:14:30 +05:30
if ( MSVC )
2022-12-17 02:35:12 +05:30
# /GS Adds buffer security checks, default on but incuded anyway to mirror gcc's fstack-protector flag
2022-10-26 06:14:30 +05:30
# /permissive- specify standards-conforming compiler behavior, also enabled by Qt6, default on with std:c++20
2022-12-16 05:03:03 +05:30
# Use /W4 as /Wall includes unnesserey warnings such as added padding to structs
2022-12-17 02:35:12 +05:30
set ( CMAKE_CXX_FLAGS "/GS /permissive- /W4 ${CMAKE_CXX_FLAGS}" )
2022-05-17 02:07:26 +05:30
2022-10-26 06:14:30 +05:30
# LINK accepts /SUBSYSTEM whics sets if we are a WINDOWS (gui) or a CONSOLE programs
# This implicitly selects an entrypoint specific to the subsystem selected
# qtmain/QtEntryPointLib provides the correct entrypoint (wWinMain) for gui programs
# Additinaly LINK autodetects we use a GUI so we can omit /SUBSYSTEM
# This allows tests to still use have console without using seperate linker flags
2022-12-16 05:03:03 +05:30
# /LTCG allows for linking wholy optimizated programs
2022-10-26 06:14:30 +05:30
# /MANIFEST:NO disables generating a manifest file, we instead provide our own
# /STACK sets the stack reserve size, ATL's pack list needs 3-4 MiB as of November 2022, provide 8 MiB
2022-12-16 05:03:03 +05:30
set ( CMAKE_EXE_LINKER_FLAGS "/LTCG /MANIFEST:NO /STACK:8388608 ${CMAKE_EXE_LINKER_FLAGS}" )
2022-10-26 06:14:30 +05:30
2022-12-17 02:35:12 +05:30
# /GL enables whole program optimizations
# /Gw helps reduce binary size
# /Gy allows the compiler to package individual functions
# /guard:cf enables control flow guard
foreach ( lang C CXX )
set ( "CMAKE_${lang}_FLAGS_RELEASE" "/GL /Gw /Gy /guard:cf" )
endforeach ( )
2022-10-26 06:14:30 +05:30
# See https://github.com/ccache/ccache/issues/1040
# Note, CMake 3.25 replaces this with CMAKE_MSVC_DEBUG_INFORMATION_FORMAT
# See https://cmake.org/cmake/help/v3.25/variable/CMAKE_MSVC_DEBUG_INFORMATION_FORMAT.html
foreach ( config DEBUG RELWITHDEBINFO )
foreach ( lang C CXX )
set ( flags_var "CMAKE_${lang}_FLAGS_${config}" )
string ( REGEX REPLACE "/Z[Ii]" "/Z7" ${ flags_var } "${${flags_var}}" )
endforeach ( )
endforeach ( )
2022-10-30 02:28:08 +05:30
if ( CMAKE_MSVC_RUNTIME_LIBRARY STREQUAL "MultiThreadedDLL" )
set ( CMAKE_MAP_IMPORTED_CONFIG_DEBUG Release "" )
set ( CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO Release "" )
endif ( )
2022-10-26 06:14:30 +05:30
else ( )
set ( CMAKE_CXX_FLAGS "-Wall -pedantic -fstack-protector-strong --param=ssp-buffer-size=4 ${CMAKE_CXX_FLAGS}" )
# ATL's pack list needs more than the default 1 Mib stack on windows
if ( WIN32 )
set ( CMAKE_EXE_LINKER_FLAGS "-Wl,--stack,8388608 ${CMAKE_EXE_LINKER_FLAGS}" )
endif ( )
2022-11-03 01:38:08 +05:30
endif ( )
2022-05-17 02:07:26 +05:30
# Fix build with Qt 5.13
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DQT_NO_DEPRECATED_WARNINGS=Y" )
2022-02-04 03:41:10 +05:30
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DQT_DISABLE_DEPRECATED_BEFORE=0x050C00" )
2021-12-12 06:05:46 +05:30
2022-11-16 01:53:20 +05:30
# Fix aarch64 build for toml++
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTOML_ENABLE_FLOAT16=0" )
2022-05-23 00:20:37 +05:30
# set CXXFLAGS for build targets
2022-06-09 00:34:27 +05:30
set ( CMAKE_CXX_FLAGS_RELEASE "-O2 -D_FORTIFY_SOURCE=2 ${CMAKE_CXX_FLAGS_RELEASE}" )
2022-05-23 00:20:37 +05:30
2022-03-23 14:35:31 +05:30
option ( ENABLE_LTO "Enable Link Time Optimization" off )
if ( ENABLE_LTO )
include ( CheckIPOSupported )
check_ipo_supported ( RESULT ipo_supported OUTPUT ipo_error )
2022-10-29 21:25:38 +05:30
if ( ipo_supported )
set ( CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE )
set ( CMAKE_INTERPROCEDURAL_OPTIMIZATION_MINSIZEREL TRUE )
if ( CMAKE_BUILD_TYPE )
if ( CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" )
message ( STATUS "IPO / LTO enabled" )
else ( )
message ( STATUS "Not enabling IPO / LTO on debug builds" )
endif ( )
else ( )
message ( STATUS "IPO / LTO will only be enabled for release builds" )
endif ( )
2022-03-23 14:35:31 +05:30
else ( )
message ( STATUS "IPO / LTO not supported: <${ipo_error}>" )
endif ( )
2022-03-19 22:38:28 +05:30
endif ( )
2022-06-12 05:16:30 +05:30
option ( BUILD_TESTING "Build the testing tree." ON )
2022-10-28 03:01:51 +05:30
find_package ( ECM QUIET NO_MODULE )
if ( NOT ECM_FOUND )
if ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/libraries/extra-cmake-modules/CMakeLists.txt" )
message ( STATUS "Using bundled ECM" )
set ( CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/libraries/extra-cmake-modules/modules;${CMAKE_MODULE_PATH}" )
else ( )
message ( FATAL_ERROR
" C o u l d n o t f i n d E C M \ n \ n "
" E i t h e r i n s t a l l E C M u s i n g t h e s y s t e m p a c k a g e m a n a g e r o r c l o n e s u b m o d u l e s \ n "
" S u b m o d u l e s c a n b e c l o n e d w i t h ' g i t s u b m o d u l e u p d a t e - - i n i t - - r e c u r s i v e ' " )
endif ( )
else ( )
set ( CMAKE_MODULE_PATH "${ECM_MODULE_PATH};${CMAKE_MODULE_PATH}" )
endif ( )
2022-06-15 01:12:44 +05:30
include ( CTest )
include ( ECMAddTests )
2022-09-12 01:55:18 +05:30
if ( BUILD_TESTING )
2022-06-12 05:16:30 +05:30
enable_testing ( )
endif ( )
2018-01-22 08:58:07 +05:30
##################################### Set Application options #####################################
2022-02-10 17:25:07 +05:30
######## Set URLs ########
2022-10-20 02:33:18 +05:30
set ( Launcher_NEWS_RSS_URL "https://prismlauncher.org/feed/feed.xml" CACHE STRING "URL to fetch Prism Launcher's news RSS feed from." )
2022-10-18 12:31:48 +05:30
set ( Launcher_NEWS_OPEN_URL "https://prismlauncher.org/news" CACHE STRING "URL that gets opened when the user clicks 'More News'" )
set ( Launcher_HELP_URL "https://prismlauncher.org/wiki/help-pages/%1" CACHE STRING "URL (with arg %1 to be substituted with page-id) that gets opened when the user requests help" )
2022-02-10 17:25:07 +05:30
2018-01-22 08:58:07 +05:30
######## Set version numbers ########
2022-12-13 15:39:48 +05:30
set ( Launcher_VERSION_MAJOR 7 )
2022-07-23 17:50:52 +05:30
set ( Launcher_VERSION_MINOR 0 )
2018-01-22 08:58:07 +05:30
2022-07-23 17:50:52 +05:30
set ( Launcher_VERSION_NAME "${Launcher_VERSION_MAJOR}.${Launcher_VERSION_MINOR}" )
set ( Launcher_VERSION_NAME4 "${Launcher_VERSION_MAJOR}.${Launcher_VERSION_MINOR}.0.0" )
set ( Launcher_VERSION_NAME4_COMMA "${Launcher_VERSION_MAJOR},${Launcher_VERSION_MINOR},0,0" )
2018-01-22 08:58:07 +05:30
# Build platform.
2022-02-21 05:53:08 +05:30
set ( Launcher_BUILD_PLATFORM "" CACHE STRING "A short string identifying the platform that this build was built for. Only used to display in the about dialog." )
2018-01-22 08:58:07 +05:30
# Channel list URL
2021-10-13 05:29:25 +05:30
set ( Launcher_UPDATER_BASE "" CACHE STRING "Base URL for the updater." )
2018-01-22 08:58:07 +05:30
2020-07-18 19:48:02 +05:30
# The metadata server
2022-10-18 12:31:48 +05:30
set ( Launcher_META_URL "https://meta.prismlauncher.org/v1/" CACHE STRING "URL to fetch Launcher's meta files from." )
2020-07-18 19:48:02 +05:30
2021-07-02 00:19:38 +05:30
# Imgur API Client ID
2021-10-13 05:29:25 +05:30
set ( Launcher_IMGUR_CLIENT_ID "5b97b0713fba4a3" CACHE STRING "Client ID you can get from Imgur when you register an application" )
2021-07-02 00:19:38 +05:30
2021-06-18 16:54:20 +05:30
# Bug tracker URL
2022-10-18 12:31:48 +05:30
set ( Launcher_BUG_TRACKER_URL "https://github.com/PrismLauncher/PrismLauncher/issues" CACHE STRING "URL for the bug tracker." )
2021-06-18 16:54:20 +05:30
2022-02-10 19:25:52 +05:30
# Translations Platform URL
2022-10-18 22:33:00 +05:30
set ( Launcher_TRANSLATIONS_URL "https://hosted.weblate.org/projects/prismlauncher/launcher/" CACHE STRING "URL for the translations platform." )
2022-02-10 19:25:52 +05:30
2022-03-08 23:11:23 +05:30
# Matrix Space
2022-10-18 12:31:48 +05:30
set ( Launcher_MATRIX_URL "https://matrix.to/#/#prismlauncher:matrix.org" CACHE STRING "URL to the Matrix Space" )
2022-03-08 23:11:23 +05:30
2021-06-18 16:54:20 +05:30
# Discord URL
2022-10-18 12:31:48 +05:30
set ( Launcher_DISCORD_URL "https://discord.gg/prismlauncher" CACHE STRING "URL for the Discord guild." )
2021-06-18 16:54:20 +05:30
# Subreddit URL
2022-10-18 12:31:48 +05:30
set ( Launcher_SUBREDDIT_URL "https://www.reddit.com/r/PrismLauncher/" CACHE STRING "URL for the subreddit." )
2021-06-18 16:54:20 +05:30
2022-01-25 03:25:57 +05:30
# Builds
2022-04-16 18:40:13 +05:30
set ( Launcher_FORCE_BUNDLED_LIBS OFF CACHE BOOL "Prevent using system libraries, if they are available as submodules" )
2022-01-25 03:25:57 +05:30
set ( Launcher_QT_VERSION_MAJOR "5" CACHE STRING "Major Qt version to build against" )
2022-05-28 15:37:01 +05:30
# API Keys
# NOTE: These API keys are here for convenience. If you rebrand this software or intend to break the terms of service
# of these platforms, please change these API keys beforehand.
# Be aware that if you were to use these API keys for malicious purposes they might get revoked, which might cause
# breakage to thousands of users.
# If you don't plan to use these features of this software, you can just remove these values.
# By using this key in your builds you accept the terms of use laid down in
# https://docs.microsoft.com/en-us/legal/microsoft-identity-platform/terms-of-use
2022-10-18 14:07:35 +05:30
set ( Launcher_MSA_CLIENT_ID "c36a9fb6-4f2a-41ff-90bd-ae7cc92031eb" CACHE STRING "Client ID you can get from Microsoft Identity Platform when you register an application" )
2022-05-28 15:37:01 +05:30
# By using this key in your builds you accept the terms and conditions laid down in
# https://support.curseforge.com/en/support/solutions/articles/9000207405-curse-forge-3rd-party-api-terms-and-conditions
# NOTE: CurseForge requires you to change this if you make any kind of derivative work.
2022-10-18 16:54:57 +05:30
# This key was issued specifically for Prism Launcher
set ( Launcher_CURSEFORGE_API_KEY "$2a$10$wuAJuNZuted3NORVmpgUC.m8sI.pv1tOPKZyBgLFGjxFp/br0lZCC" CACHE STRING "API key for the CurseForge platform" )
2022-05-28 15:37:01 +05:30
2022-01-25 03:25:57 +05:30
2018-01-22 08:58:07 +05:30
#### Check the current Git commit and branch
include ( GetGitRevisionDescription )
2022-06-18 01:25:55 +05:30
git_get_exact_tag ( Launcher_GIT_TAG )
2021-10-13 05:29:25 +05:30
get_git_head_revision ( Launcher_GIT_REFSPEC Launcher_GIT_COMMIT )
2018-01-22 08:58:07 +05:30
2021-10-13 05:29:25 +05:30
message ( STATUS "Git commit: ${Launcher_GIT_COMMIT}" )
2022-06-18 01:25:55 +05:30
message ( STATUS "Git tag: ${Launcher_GIT_TAG}" )
2021-10-13 05:29:25 +05:30
message ( STATUS "Git refspec: ${Launcher_GIT_REFSPEC}" )
2018-01-22 08:58:07 +05:30
2022-02-09 12:49:34 +05:30
string ( TIMESTAMP TODAY "%Y-%m-%d" )
2022-07-23 17:50:52 +05:30
set ( Launcher_BUILD_TIMESTAMP "${TODAY}" )
2018-01-22 08:58:07 +05:30
2018-01-28 04:23:10 +05:30
################################ 3rd Party Libs ################################
2023-01-08 23:42:14 +05:30
# Successive configurations of cmake without cleaning the build dir will cause zlib fallback to fail due to cached values
# Record when fallback triggered and skip this find_package
if ( NOT Launcher_FORCE_BUNDLED_LIBS AND NOT FORCE_BUNDLED_ZLIB )
2022-10-26 06:14:30 +05:30
find_package ( ZLIB QUIET )
endif ( )
2023-01-08 23:42:14 +05:30
if ( NOT ZLIB_FOUND )
set ( FORCE_BUNDLED_ZLIB TRUE CACHE BOOL "" )
mark_as_advanced ( FORCE_BUNDLED_ZLIB )
endif ( )
2022-10-26 06:14:30 +05:30
2018-01-28 04:23:10 +05:30
# Find the required Qt parts
2022-05-03 01:04:09 +05:30
include ( QtVersionlessBackport )
2022-01-27 17:22:12 +05:30
if ( Launcher_QT_VERSION_MAJOR EQUAL 5 )
set ( QT_VERSION_MAJOR 5 )
find_package ( Qt5 REQUIRED COMPONENTS Core Widgets Concurrent Network Test Xml )
if ( NOT Launcher_FORCE_BUNDLED_LIBS )
2022-05-24 02:57:35 +05:30
find_package ( QuaZip-Qt5 1.3 QUIET )
2022-01-27 17:22:12 +05:30
endif ( )
if ( NOT QuaZip-Qt5_FOUND )
set ( QUAZIP_QT_MAJOR_VERSION ${ QT_VERSION_MAJOR } CACHE STRING "Qt version to use (4, 5 or 6), defaults to ${QT_VERSION_MAJOR}" FORCE )
set ( FORCE_BUNDLED_QUAZIP 1 )
endif ( )
2022-07-03 20:45:37 +05:30
# Qt 6 sets these by default. Notably causes Windows APIs to use UNICODE strings.
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUNICODE -D_UNICODE" )
2022-05-03 01:04:09 +05:30
elseif ( Launcher_QT_VERSION_MAJOR EQUAL 6 )
set ( QT_VERSION_MAJOR 6 )
2022-11-25 09:24:15 +05:30
find_package ( Qt6 REQUIRED COMPONENTS Core CoreTools Widgets Concurrent Network Test Xml Core5Compat )
2022-05-03 01:04:09 +05:30
list ( APPEND Launcher_QT_LIBS Qt6::Core5Compat )
if ( NOT Launcher_FORCE_BUNDLED_LIBS )
find_package ( QuaZip-Qt6 1.3 QUIET )
endif ( )
if ( NOT QuaZip-Qt6_FOUND )
set ( QUAZIP_QT_MAJOR_VERSION ${ QT_VERSION_MAJOR } CACHE STRING "Qt version to use (4, 5 or 6), defaults to ${QT_VERSION_MAJOR}" FORCE )
set ( FORCE_BUNDLED_QUAZIP 1 )
endif ( )
2022-01-25 03:25:57 +05:30
else ( )
2022-01-27 17:22:12 +05:30
message ( FATAL_ERROR "Qt version ${Launcher_QT_VERSION_MAJOR} is not supported" )
2022-01-25 03:25:57 +05:30
endif ( )
2022-01-21 01:10:56 +05:30
2022-11-24 17:23:29 +05:30
if ( Launcher_QT_VERSION_MAJOR EQUAL 5 )
include ( ECMQueryQt )
ecm_query_qt ( QT_PLUGINS_DIR QT_INSTALL_PLUGINS )
ecm_query_qt ( QT_LIBS_DIR QT_INSTALL_LIBS )
ecm_query_qt ( QT_LIBEXECS_DIR QT_INSTALL_LIBEXECS )
else ( )
set ( QT_PLUGINS_DIR ${ QT${QT_VERSION_MAJOR } _INSTALL_PREFIX}/ ${ QT${QT_VERSION_MAJOR } _INSTALL_PLUGINS} )
set ( QT_LIBS_DIR ${ QT${QT_VERSION_MAJOR } _INSTALL_PREFIX}/ ${ QT${QT_VERSION_MAJOR } _INSTALL_LIBS} )
set ( QT_LIBEXECS_DIR ${ QT${QT_VERSION_MAJOR } _INSTALL_PREFIX}/ ${ QT${QT_VERSION_MAJOR } _INSTALL_LIBEXECS} )
endif ( )
2018-01-28 04:23:10 +05:30
2022-07-04 02:10:05 +05:30
# NOTE: Qt 6 already sets this by default
2018-01-28 04:23:10 +05:30
if ( Qt5_POSITION_INDEPENDENT_CODE )
SET ( CMAKE_POSITION_INDEPENDENT_CODE ON )
endif ( )
2022-09-26 17:13:26 +05:30
if ( NOT Launcher_FORCE_BUNDLED_LIBS )
2022-10-15 16:43:34 +05:30
# Find toml++
2022-09-26 17:13:26 +05:30
find_package ( tomlplusplus 3.2.0 QUIET )
2022-10-15 16:43:34 +05:30
# Find ghc_filesystem
find_package ( ghc_filesystem QUIET )
2023-01-07 19:27:13 +05:30
# Find cmark
find_package ( cmark QUIET )
2022-10-15 16:43:34 +05:30
endif ( )
2022-10-14 20:15:13 +05:30
2022-12-27 21:53:44 +05:30
include ( ECMQtDeclareLoggingCategory )
2022-01-10 00:04:01 +05:30
####################################### Program Info #######################################
2021-10-13 05:29:25 +05:30
2022-10-18 12:31:48 +05:30
set ( Launcher_APP_BINARY_NAME "prismlauncher" CACHE STRING "Name of the Launcher binary" )
2021-12-20 08:11:08 +05:30
add_subdirectory ( program_info )
2021-10-13 05:29:25 +05:30
2018-01-22 08:58:07 +05:30
####################################### Install layout #######################################
2022-03-23 19:08:58 +05:30
if ( NOT ( UNIX AND APPLE ) )
# Install "portable.txt" if selected component is "portable"
2022-03-23 19:12:56 +05:30
install ( FILES "${CMAKE_CURRENT_SOURCE_DIR}/${Launcher_Portable_File}" DESTINATION "." COMPONENT portable EXCLUDE_FROM_ALL )
2022-03-23 19:08:58 +05:30
endif ( )
2018-01-22 08:58:07 +05:30
2022-02-12 09:16:22 +05:30
if ( UNIX AND APPLE )
2021-10-13 05:29:25 +05:30
set ( BINARY_DEST_DIR "${Launcher_Name}.app/Contents/MacOS" )
set ( LIBRARY_DEST_DIR "${Launcher_Name}.app/Contents/MacOS" )
set ( PLUGIN_DEST_DIR "${Launcher_Name}.app/Contents/MacOS" )
2022-05-15 23:26:58 +05:30
set ( FRAMEWORK_DEST_DIR "${Launcher_Name}.app/Contents/Frameworks" )
2021-10-13 05:29:25 +05:30
set ( RESOURCES_DEST_DIR "${Launcher_Name}.app/Contents/Resources" )
set ( JARS_DEST_DIR "${Launcher_Name}.app/Contents/MacOS/jars" )
2018-01-22 08:58:07 +05:30
2018-07-15 18:21:05 +05:30
# Apps to bundle
2021-10-13 05:29:25 +05:30
set ( APPS "\${CMAKE_INSTALL_PREFIX}/${Launcher_Name}.app" )
2018-01-22 08:58:07 +05:30
2018-07-15 18:21:05 +05:30
# Mac bundle settings
2022-10-22 18:30:52 +05:30
set ( MACOSX_BUNDLE_BUNDLE_NAME "${Launcher_DisplayName}" )
set ( MACOSX_BUNDLE_INFO_STRING "${Launcher_DisplayName}: A custom launcher for Minecraft that allows you to easily manage multiple installations of Minecraft at once." )
2022-10-18 12:31:48 +05:30
set ( MACOSX_BUNDLE_GUI_IDENTIFIER "org.prismlauncher.${Launcher_Name}" )
2022-07-23 17:50:52 +05:30
set ( MACOSX_BUNDLE_BUNDLE_VERSION "${Launcher_VERSION_NAME}" )
set ( MACOSX_BUNDLE_SHORT_VERSION_STRING "${Launcher_VERSION_NAME}" )
set ( MACOSX_BUNDLE_LONG_VERSION_STRING "${Launcher_VERSION_NAME}" )
2021-10-13 05:29:25 +05:30
set ( MACOSX_BUNDLE_ICON_FILE ${ Launcher_Name } .icns )
2022-10-25 18:54:41 +05:30
set ( MACOSX_BUNDLE_COPYRIGHT "© 2022 ${Launcher_Copyright_Mac}" )
2022-10-18 16:19:08 +05:30
set ( MACOSX_SPARKLE_UPDATE_PUBLIC_KEY "v55ZWWD6QlPoXGV6VLzOTZxZUggWeE51X8cRQyQh6vA=" )
2022-10-18 12:31:48 +05:30
set ( MACOSX_SPARKLE_UPDATE_FEED_URL "https://prismlauncher.org/feed/appcast.xml" )
2018-01-22 08:58:07 +05:30
2022-05-15 23:26:58 +05:30
set ( MACOSX_SPARKLE_DOWNLOAD_URL "https://github.com/sparkle-project/Sparkle/releases/download/2.1.0/Sparkle-2.1.0.tar.xz" CACHE STRING "URL to Sparkle release archive" )
set ( MACOSX_SPARKLE_SHA256 "bf6ac1caa9f8d321d5784859c88da874f28412f37fb327bc21b7b14c5d61ef94" CACHE STRING "SHA256 checksum for Sparkle release archive" )
set ( MACOSX_SPARKLE_DIR "${CMAKE_BINARY_DIR}/frameworks/Sparkle" )
2018-07-15 18:21:05 +05:30
# directories to look for dependencies
2022-05-15 23:26:58 +05:30
set ( DIRS ${ QT_LIBS_DIR } ${ QT_LIBEXECS_DIR } ${ CMAKE_LIBRARY_OUTPUT_DIRECTORY } ${ CMAKE_RUNTIME_OUTPUT_DIRECTORY } ${ MACOSX_SPARKLE_DIR } )
2018-01-22 08:58:07 +05:30
2018-07-15 18:21:05 +05:30
# install as bundle
set ( INSTALL_BUNDLE "full" )
2018-01-22 08:58:07 +05:30
2018-07-15 18:21:05 +05:30
# Add the icon
2021-11-26 04:44:28 +05:30
install ( FILES ${ Launcher_Branding_ICNS } DESTINATION ${ RESOURCES_DEST_DIR } RENAME ${ Launcher_Name } .icns )
2018-01-22 08:58:07 +05:30
2022-02-12 09:16:22 +05:30
elseif ( UNIX )
2022-11-04 22:59:19 +05:30
include ( KDEInstallDirs )
2018-07-15 18:21:05 +05:30
set ( BINARY_DEST_DIR "bin" )
2022-03-23 17:50:14 +05:30
set ( LIBRARY_DEST_DIR "lib${LIB_SUFFIX}" )
2022-10-22 05:24:10 +05:30
set ( JARS_DEST_DIR "share/${Launcher_APP_BINARY_NAME}" )
2021-12-30 22:23:17 +05:30
# install as bundle with no dependencies included
set ( INSTALL_BUNDLE "nodeps" )
2021-12-17 23:22:13 +05:30
2022-02-12 09:16:22 +05:30
# Set RPATH
SET ( Launcher_BINARY_RPATH "$ORIGIN/" )
2022-11-04 22:59:19 +05:30
install ( FILES ${ CMAKE_CURRENT_BINARY_DIR } / ${ Launcher_Desktop } DESTINATION ${ KDE_INSTALL_APPDIR } )
install ( FILES ${ CMAKE_CURRENT_BINARY_DIR } / ${ Launcher_MetaInfo } DESTINATION ${ KDE_INSTALL_METAINFODIR } )
2022-11-05 15:12:44 +05:30
install ( FILES ${ CMAKE_CURRENT_SOURCE_DIR } / ${ Launcher_SVG } DESTINATION "${KDE_INSTALL_ICONDIR}/hicolor/scalable/apps" )
2022-11-04 22:59:19 +05:30
install ( FILES ${ CMAKE_CURRENT_SOURCE_DIR } / ${ Launcher_mrpack_MIMEInfo } DESTINATION ${ KDE_INSTALL_MIMEDIR } )
2022-06-26 23:06:48 +05:30
if ( Launcher_ManPage )
2022-11-05 04:13:18 +05:30
install ( FILES ${ CMAKE_CURRENT_BINARY_DIR } / ${ Launcher_ManPage } DESTINATION "${KDE_INSTALL_MANDIR}/man6" )
2022-06-26 23:06:48 +05:30
endif ( )
2022-03-23 17:50:14 +05:30
# Install basic runner script if component "portable" is selected
configure_file ( launcher/Launcher.in "${CMAKE_CURRENT_BINARY_DIR}/LauncherScript" @ONLY )
2022-03-23 19:12:56 +05:30
install ( PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/LauncherScript" DESTINATION "." RENAME ${ Launcher_Name } COMPONENT portable EXCLUDE_FROM_ALL )
2022-03-23 17:50:14 +05:30
2022-02-12 09:16:22 +05:30
elseif ( WIN32 )
2018-07-15 18:21:05 +05:30
set ( BINARY_DEST_DIR "." )
set ( LIBRARY_DEST_DIR "." )
set ( PLUGIN_DEST_DIR "." )
set ( RESOURCES_DEST_DIR "." )
set ( JARS_DEST_DIR "jars" )
2018-01-22 08:58:07 +05:30
2018-07-15 18:21:05 +05:30
# Apps to bundle
2021-10-13 05:29:25 +05:30
set ( APPS "\${CMAKE_INSTALL_PREFIX}/${Launcher_Name}.exe" )
2018-01-22 08:58:07 +05:30
2018-07-15 18:21:05 +05:30
# directories to look for dependencies
set ( DIRS ${ QT_LIBS_DIR } ${ QT_LIBEXECS_DIR } ${ CMAKE_LIBRARY_OUTPUT_DIRECTORY } ${ CMAKE_RUNTIME_OUTPUT_DIRECTORY } )
2018-01-22 08:58:07 +05:30
2018-07-15 18:21:05 +05:30
# install as bundle
set ( INSTALL_BUNDLE "full" )
2018-01-22 08:58:07 +05:30
else ( )
2022-02-12 09:16:22 +05:30
message ( FATAL_ERROR "Platform not supported" )
2018-01-22 08:58:07 +05:30
endif ( )
2014-01-08 05:57:40 +05:30
################################ Included Libs ################################
2015-02-13 02:31:20 +05:30
include ( ExternalProject )
set_directory_properties ( PROPERTIES EP_BASE External )
2022-02-07 20:14:46 +05:30
option ( NBT_BUILD_SHARED "Build NBT shared library" OFF )
2015-09-29 00:50:27 +05:30
option ( NBT_USE_ZLIB "Build NBT library with zlib support" OFF )
option ( NBT_BUILD_TESTS "Build NBT library tests" OFF ) #FIXME: fix unit tests.
2016-04-10 19:23:05 +05:30
add_subdirectory ( libraries/libnbtplusplus )
2014-01-08 05:57:40 +05:30
2017-01-02 00:29:46 +05:30
add_subdirectory ( libraries/systeminfo ) # system information library
2016-04-10 19:23:05 +05:30
add_subdirectory ( libraries/launcher ) # java based launcher part for Minecraft
add_subdirectory ( libraries/javacheck ) # java compatibility checker
2023-01-08 23:42:14 +05:30
if ( FORCE_BUNDLED_ZLIB )
2022-10-26 06:14:30 +05:30
message ( STATUS "Using bundled zlib" )
2023-01-08 23:42:14 +05:30
2022-10-31 06:44:25 +05:30
set ( CMAKE_POLICY_DEFAULT_CMP0069 NEW ) # Suppress cmake warnings and allow INTERPROCEDURAL_OPTIMIZATION for zlib
2022-10-26 06:14:30 +05:30
set ( SKIP_INSTALL_ALL ON )
add_subdirectory ( libraries/zlib EXCLUDE_FROM_ALL )
2023-01-24 00:33:12 +05:30
# On OS where unistd.h exists, zlib's generated header defines `Z_HAVE_UNISTD_H`, while the included header does not.
# We cannot safely undo the rename on those systems, and they generally have packages for zlib anyway.
check_include_file ( unistd.h NEED_GENERATED_ZCONF )
if ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/libraries/zlib/zconf.h.included" AND NOT NEED_GENERATED_ZCONF )
# zlib's cmake script renames a file, dirtying the submodule, see https://github.com/madler/zlib/issues/162
message ( STATUS "Undoing Rename" )
message ( STATUS " ${CMAKE_CURRENT_SOURCE_DIR}/libraries/zlib/zconf.h" )
file ( RENAME "${CMAKE_CURRENT_SOURCE_DIR}/libraries/zlib/zconf.h.included" "${CMAKE_CURRENT_SOURCE_DIR}/libraries/zlib/zconf.h" )
endif ( )
set ( ZLIB_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/libraries/zlib" "${CMAKE_CURRENT_SOURCE_DIR}/libraries/zlib" CACHE STRING "" FORCE )
2022-10-26 06:14:30 +05:30
set_target_properties ( zlibstatic PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${ZLIB_INCLUDE_DIR}" )
add_library ( ZLIB::ZLIB ALIAS zlibstatic )
2022-11-23 00:47:16 +05:30
set ( ZLIB_LIBRARY ZLIB::ZLIB CACHE STRING "zlib library name" )
2022-10-26 06:14:30 +05:30
find_package ( ZLIB REQUIRED )
else ( )
message ( STATUS "Using system zlib" )
endif ( )
2022-01-27 17:22:12 +05:30
if ( FORCE_BUNDLED_QUAZIP )
message ( STATUS "Using bundled QuaZip" )
2022-02-04 17:54:13 +05:30
set ( BUILD_SHARED_LIBS 0 ) # link statically to avoid conflicts.
set ( QUAZIP_INSTALL 0 )
2022-01-25 03:25:57 +05:30
add_subdirectory ( libraries/quazip ) # zip manipulation library
2022-04-16 19:53:42 +05:30
else ( )
message ( STATUS "Using system QuaZip" )
2022-01-25 03:25:57 +05:30
endif ( )
2016-04-10 19:23:05 +05:30
add_subdirectory ( libraries/rainbow ) # Qt extension for colors
2016-10-30 07:07:38 +05:30
add_subdirectory ( libraries/LocalPeer ) # fork of a library from Qt solutions
2022-09-25 02:50:01 +05:30
if ( NOT tomlplusplus_FOUND )
message ( STATUS "Using bundled tomlplusplus" )
add_subdirectory ( libraries/tomlplusplus ) # toml parser
else ( )
message ( STATUS "Using system tomlplusplus" )
endif ( )
2023-01-07 19:27:13 +05:30
if ( NOT cmark_FOUND )
message ( STATUS "Using bundled cmark" )
set ( CMARK_STATIC ON CACHE BOOL "Build static libcmark library" FORCE )
set ( CMARK_SHARED OFF CACHE BOOL "Build shared libcmark library" FORCE )
set ( CMARK_TESTS OFF CACHE BOOL "Build cmark tests and enable testing" FORCE )
add_subdirectory ( libraries/cmark EXCLUDE_FROM_ALL ) # Markdown parser
add_library ( cmark::cmark ALIAS cmark_static )
else ( )
message ( STATUS "Using system cmark" )
endif ( )
2021-07-22 23:45:20 +05:30
add_subdirectory ( libraries/katabasis ) # An OAuth2 library that tried to do too much
2022-06-30 02:07:25 +05:30
add_subdirectory ( libraries/gamemode )
2022-06-04 03:32:11 +05:30
add_subdirectory ( libraries/murmur2 ) # Hash for usage with the CurseForge API
2022-10-15 16:43:34 +05:30
if ( NOT ghc_filesystem_FOUND )
message ( STATUS "Using bundled ghc_filesystem" )
set ( GHC_FILESYSTEM_WITH_INSTALL OFF ) # Workaround ghc::filesystem bug
add_subdirectory ( libraries/filesystem ) # Implementation of std::filesystem for old C++, for usage in old macOS
add_library ( ghcFilesystem::ghc_filesystem ALIAS ghc_filesystem )
else ( )
message ( STATUS "Using system ghc_filesystem" )
endif ( )
2015-03-02 02:50:57 +05:30
2015-02-12 00:26:06 +05:30
############################### Built Artifacts ###############################
2020-07-18 19:48:02 +05:30
add_subdirectory ( buildconfig )
2018-01-22 08:58:07 +05:30
2022-09-12 01:55:18 +05:30
if ( BUILD_TESTING )
add_subdirectory ( tests )
endif ( )
2018-01-22 08:58:07 +05:30
# NOTE: this must always be last to appease the CMake deity of quirky install command evaluation order.
2021-07-25 22:41:59 +05:30
add_subdirectory ( launcher )