484 lines
14 KiB
CMake
484 lines
14 KiB
CMake
project(MultiMC-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 4)
|
|
set(MultiMC_VERSION_HOTFIX 8)
|
|
|
|
# Build number
|
|
set(MultiMC_VERSION_BUILD -1 CACHE STRING "Build number. -1 for no build number.")
|
|
|
|
# Version type
|
|
set(MultiMC_VERSION_TYPE "Custom" CACHE STRING "MultiMC's version type. This should be one of 'Custom', 'Release', 'ReleaseCandidate', or 'Development', depending on what type of version this is.")
|
|
|
|
# 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.")
|
|
|
|
# Version channel
|
|
set(MultiMC_VERSION_CHANNEL "" CACHE STRING "The current build's channel. Included in the version string.")
|
|
|
|
# Channel list URL
|
|
set(MultiMC_CHANLIST_URL "" CACHE STRING "URL for the channel list.")
|
|
|
|
# Updater enabled?
|
|
set(MultiMC_UPDATER false CACHE BOOL "Whether or not the update system is enabled. If this is enabled, you must also set MultiMC_CHANLIST_URL and MultiMC_VERSION_CHANNEL in order for it to work properly.")
|
|
|
|
# Notification URL
|
|
set(MultiMC_NOTIFICATION_URL "" CACHE STRING "URL for checking for notifications.")
|
|
|
|
#### Check the current Git commit
|
|
include(GitFunctions)
|
|
git_run(COMMAND rev-parse HEAD DEFAULT "Unknown" OUTPUT_VAR MultiMC_GIT_COMMIT)
|
|
message(STATUS "Git commit: ${MultiMC_GIT_COMMIT}")
|
|
|
|
set(MultiMC_RELEASE_VERSION_NAME "${MultiMC_VERSION_MAJOR}.${MultiMC_VERSION_MINOR}")
|
|
if(MultiMC_VERSION_HOTFIX GREATER 0)
|
|
set(MultiMC_RELEASE_VERSION_NAME "${MultiMC_RELEASE_VERSION_NAME}.${MultiMC_VERSION_HOTFIX}")
|
|
endif()
|
|
|
|
# Build a version string to display in the configure logs.
|
|
if(MultiMC_VERSION_TYPE STREQUAL "Custom")
|
|
message(STATUS "Version Type: Custom")
|
|
set(MultiMC_VERSION_STRING "${MultiMC_RELEASE_VERSION_NAME}")
|
|
elseif(MultiMC_VERSION_TYPE STREQUAL "Release")
|
|
message(STATUS "Version Type: Stable Release")
|
|
set(MultiMC_VERSION_STRING "${MultiMC_RELEASE_VERSION_NAME}")
|
|
elseif(MultiMC_VERSION_TYPE STREQUAL "Development")
|
|
message(STATUS "Version Type: Development")
|
|
set(MultiMC_VERSION_STRING "${MultiMC_RELEASE_VERSION_NAME}-dev${MultiMC_VERSION_BUILD}")
|
|
else()
|
|
message(ERROR "Invalid build type.")
|
|
endif()
|
|
|
|
message(STATUS "MultiMC 5 Version: ${MultiMC_VERSION_STRING}")
|
|
|
|
#### Custom target to just print the version.
|
|
add_custom_target(version echo "Version: ${MultiMC_VERSION_STRING}")
|
|
|
|
# If the update system is enabled, make sure MultiMC_CHANLIST_URL and MultiMC_VERSION_CHANNEL are set.
|
|
if(MultiMC_UPDATER)
|
|
if(MultiMC_VERSION_CHANNEL STREQUAL "")
|
|
message(FATAL_ERROR "Update system is enabled, but MultiMC_VERSION_CHANNEL is not set.\n"
|
|
"Please ensure the CMake variables MultiMC_VERSION_CHANNEL, MultiMC_CHANLIST_URL, and MultiMC_VERSION_BUILD are set.")
|
|
endif()
|
|
if(MultiMC_CHANLIST_URL STREQUAL "")
|
|
message(FATAL_ERROR "Update system is enabled, but MultiMC_CHANLIST_URL is not set.\n"
|
|
"Please ensure the CMake variables MultiMC_VERSION_CHANNEL, MultiMC_CHANLIST_URL, and MultiMC_VERSION_BUILD are set.")
|
|
endif()
|
|
if(MultiMC_VERSION_BUILD LESS 0)
|
|
message(FATAL_ERROR "Update system is enabled, but MultiMC_VERSION_BUILD is not set.\n"
|
|
"Please ensure the CMake variables MultiMC_VERSION_CHANNEL, MultiMC_CHANLIST_URL, and MultiMC_VERSION_BUILD are set.")
|
|
endif()
|
|
message(STATUS "Updater is enabled. Channel list URL: ${MultiMC_CHANLIST_URL}")
|
|
endif()
|
|
|
|
######## Configure header ########
|
|
configure_file("${PROJECT_SOURCE_DIR}/BuildConfig.cpp.in" "${PROJECT_BINARY_DIR}/BuildConfig.cpp")
|
|
|
|
######## Packaging/install paths setup ########
|
|
|
|
if(UNIX AND APPLE)
|
|
set(BINARY_DEST_DIR MultiMC.app/Contents/MacOS)
|
|
set(PLUGIN_DEST_DIR MultiMC.app/Contents/MacOS)
|
|
set(QTCONF_DEST_DIR MultiMC.app/Contents/Resources)
|
|
set(APPS "\${CMAKE_INSTALL_PREFIX}/MultiMC.app")
|
|
|
|
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 MultiMC Contributors")
|
|
elseif(UNIX)
|
|
set(BINARY_DEST_DIR bin)
|
|
set(PLUGIN_DEST_DIR plugins)
|
|
set(QTCONF_DEST_DIR .)
|
|
set(APPS "\${CMAKE_INSTALL_PREFIX}/bin/MultiMC")
|
|
elseif(WIN32)
|
|
set(BINARY_DEST_DIR .)
|
|
set(PLUGIN_DEST_DIR .)
|
|
set(QTCONF_DEST_DIR .)
|
|
set(APPS "\${CMAKE_INSTALL_PREFIX}/MultiMC.exe")
|
|
endif()
|
|
|
|
# directories to look for dependencies
|
|
set(DIRS ${QT_LIBS_DIR} ${QT_LIBEXECS_DIR})
|
|
|
|
################################ FILES ################################
|
|
|
|
######## Sources and headers ########
|
|
SET(MULTIMC_SOURCES
|
|
# Application base
|
|
main.cpp
|
|
MultiMC.h
|
|
MultiMC.cpp
|
|
BuildConfig.h
|
|
${PROJECT_BINARY_DIR}/BuildConfig.cpp
|
|
|
|
# GUI - general utilities
|
|
GuiUtil.h
|
|
GuiUtil.cpp
|
|
ColumnResizer.h
|
|
ColumnResizer.cpp
|
|
InstanceProxyModel.h
|
|
InstanceProxyModel.cpp
|
|
VersionProxyModel.h
|
|
VersionProxyModel.cpp
|
|
|
|
# GUI - windows
|
|
MainWindow.h
|
|
MainWindow.cpp
|
|
ConsoleWindow.h
|
|
ConsoleWindow.cpp
|
|
|
|
# page provider for instances
|
|
InstancePageProvider.h
|
|
InstancePageProvider.cpp
|
|
|
|
# Common java checking UI
|
|
JavaCommon.h
|
|
JavaCommon.cpp
|
|
|
|
# GUI - page dialog pages
|
|
pages/BasePage.h
|
|
pages/BasePageContainer.h
|
|
pages/VersionPage.cpp
|
|
pages/VersionPage.h
|
|
pages/TexturePackPage.h
|
|
pages/ResourcePackPage.h
|
|
pages/ModFolderPage.cpp
|
|
pages/ModFolderPage.h
|
|
pages/NotesPage.cpp
|
|
pages/NotesPage.h
|
|
pages/LogPage.cpp
|
|
pages/LogPage.h
|
|
pages/InstanceSettingsPage.cpp
|
|
pages/InstanceSettingsPage.h
|
|
pages/ScreenshotsPage.cpp
|
|
pages/ScreenshotsPage.h
|
|
pages/OtherLogsPage.cpp
|
|
pages/OtherLogsPage.h
|
|
pages/LegacyJarModPage.cpp
|
|
pages/LegacyJarModPage.h
|
|
pages/LegacyUpgradePage.cpp
|
|
pages/LegacyUpgradePage.h
|
|
|
|
# GUI - global settings pages
|
|
pages/global/AccountListPage.cpp
|
|
pages/global/AccountListPage.h
|
|
pages/global/ExternalToolsPage.cpp
|
|
pages/global/ExternalToolsPage.h
|
|
pages/global/JavaPage.cpp
|
|
pages/global/JavaPage.h
|
|
pages/global/MinecraftPage.cpp
|
|
pages/global/MinecraftPage.h
|
|
pages/global/MultiMCPage.cpp
|
|
pages/global/MultiMCPage.h
|
|
pages/global/ProxyPage.cpp
|
|
pages/global/ProxyPage.h
|
|
|
|
# GUI - dialogs
|
|
dialogs/AboutDialog.cpp
|
|
dialogs/AboutDialog.h
|
|
dialogs/AccountSelectDialog.cpp
|
|
dialogs/AccountSelectDialog.h
|
|
dialogs/CopyInstanceDialog.cpp
|
|
dialogs/CopyInstanceDialog.h
|
|
dialogs/CustomMessageBox.cpp
|
|
dialogs/CustomMessageBox.h
|
|
dialogs/EditAccountDialog.cpp
|
|
dialogs/EditAccountDialog.h
|
|
dialogs/ExportInstanceDialog.cpp
|
|
dialogs/ExportInstanceDialog.h
|
|
dialogs/IconPickerDialog.cpp
|
|
dialogs/IconPickerDialog.h
|
|
dialogs/LoginDialog.cpp
|
|
dialogs/LoginDialog.h
|
|
dialogs/ModEditDialogCommon.cpp
|
|
dialogs/ModEditDialogCommon.h
|
|
dialogs/NewInstanceDialog.cpp
|
|
dialogs/NewInstanceDialog.h
|
|
dialogs/NotificationDialog.cpp
|
|
dialogs/NotificationDialog.h
|
|
pagedialog/PageDialog.cpp
|
|
pagedialog/PageDialog.h
|
|
dialogs/ProgressDialog.cpp
|
|
dialogs/ProgressDialog.h
|
|
dialogs/UpdateDialog.cpp
|
|
dialogs/UpdateDialog.h
|
|
dialogs/VersionSelectDialog.cpp
|
|
dialogs/VersionSelectDialog.h
|
|
|
|
|
|
# GUI - widgets
|
|
widgets/Common.cpp
|
|
widgets/Common.h
|
|
widgets/IconLabel.cpp
|
|
widgets/IconLabel.h
|
|
widgets/LabeledToolButton.cpp
|
|
widgets/LabeledToolButton.h
|
|
widgets/LineSeparator.cpp
|
|
widgets/LineSeparator.h
|
|
widgets/MCModInfoFrame.cpp
|
|
widgets/MCModInfoFrame.h
|
|
widgets/ModListView.cpp
|
|
widgets/ModListView.h
|
|
widgets/PageContainer.cpp
|
|
widgets/PageContainer.h
|
|
widgets/PageContainer_p.h
|
|
widgets/ServerStatus.cpp
|
|
widgets/ServerStatus.h
|
|
widgets/VersionListView.cpp
|
|
widgets/VersionListView.h
|
|
widgets/ProgressWidget.h
|
|
widgets/ProgressWidget.cpp
|
|
|
|
|
|
# GUI - instance group view
|
|
groupview/GroupedProxyModel.cpp
|
|
groupview/GroupedProxyModel.h
|
|
groupview/GroupView.cpp
|
|
groupview/GroupView.h
|
|
groupview/InstanceDelegate.cpp
|
|
groupview/InstanceDelegate.h
|
|
groupview/VisualGroup.cpp
|
|
groupview/VisualGroup.h
|
|
)
|
|
|
|
######## UIs ########
|
|
SET(MULTIMC_UIS
|
|
# Option pages
|
|
pages/VersionPage.ui
|
|
pages/ModFolderPage.ui
|
|
pages/LogPage.ui
|
|
pages/InstanceSettingsPage.ui
|
|
pages/NotesPage.ui
|
|
pages/ScreenshotsPage.ui
|
|
pages/OtherLogsPage.ui
|
|
pages/LegacyJarModPage.ui
|
|
pages/LegacyUpgradePage.ui
|
|
|
|
# Global settings pages
|
|
pages/global/AccountListPage.ui
|
|
pages/global/ExternalToolsPage.ui
|
|
pages/global/JavaPage.ui
|
|
pages/global/MinecraftPage.ui
|
|
pages/global/MultiMCPage.ui
|
|
pages/global/ProxyPage.ui
|
|
|
|
# Dialogs
|
|
dialogs/CopyInstanceDialog.ui
|
|
dialogs/NewInstanceDialog.ui
|
|
dialogs/AboutDialog.ui
|
|
dialogs/VersionSelectDialog.ui
|
|
dialogs/ProgressDialog.ui
|
|
dialogs/IconPickerDialog.ui
|
|
dialogs/AccountSelectDialog.ui
|
|
dialogs/EditAccountDialog.ui
|
|
dialogs/ExportInstanceDialog.ui
|
|
dialogs/LoginDialog.ui
|
|
dialogs/UpdateDialog.ui
|
|
dialogs/NotificationDialog.ui
|
|
|
|
# Widgets/other
|
|
widgets/MCModInfoFrame.ui
|
|
)
|
|
|
|
set(MULTIMC_QRCS
|
|
resources/backgrounds/backgrounds.qrc
|
|
resources/multimc/multimc.qrc
|
|
resources/pe_dark/pe_dark.qrc
|
|
resources/pe_light/pe_light.qrc
|
|
resources/pe_colored/pe_colored.qrc
|
|
resources/pe_blue/pe_blue.qrc
|
|
resources/OSX/OSX.qrc
|
|
resources/iOS/iOS.qrc
|
|
resources/instances/instances.qrc
|
|
resources/versions/versions.qrc
|
|
resources/certs/certs.qrc
|
|
)
|
|
|
|
######## Windows resource files ########
|
|
if(WIN32)
|
|
set(MULTIMC_RCS resources/multimc.rc)
|
|
endif()
|
|
|
|
####### X11 Stuff #######
|
|
if(UNIX AND NOT APPLE)
|
|
find_package(Qt5X11Extras REQUIRED)
|
|
set(MultiMC_LINK_ADDITIONAL_LIBS ${MultiMC_LINK_ADDITIONAL_LIBS} xcb Qt5::X11Extras)
|
|
list(APPEND MULTIMC_SOURCES Platform_X11.cpp)
|
|
else()
|
|
list(APPEND MULTIMC_SOURCES Platform_Other.cpp)
|
|
endif()
|
|
|
|
|
|
# Link additional libraries
|
|
if(WIN32)
|
|
set(MultiMC_LINK_ADDITIONAL_LIBS ${MultiMC_LINK_ADDITIONAL_LIBS} Qt5::WinMain)
|
|
endif(WIN32)
|
|
|
|
include_directories(../logic)
|
|
|
|
# Qt 5 stuff
|
|
qt5_wrap_ui(MULTIMC_UI ${MULTIMC_UIS})
|
|
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_logic xz-embedded unpack200 iconfix libUtil LogicalGui
|
|
${QUAZIP_LIBRARIES} Qt5::Core Qt5::Xml Qt5::Widgets Qt5::Network Qt5::Concurrent
|
|
hoedown
|
|
${MultiMC_LINK_ADDITIONAL_LIBS})
|
|
|
|
################################ INSTALLATION AND PACKAGING ################################
|
|
|
|
######## Install ########
|
|
|
|
#### Executable ####
|
|
if(APPLE AND UNIX) ## OSX
|
|
install(TARGETS MultiMC
|
|
BUNDLE DESTINATION . COMPONENT Runtime
|
|
RUNTIME DESTINATION MultiMC.app/Contents/MacOS COMPONENT Runtime
|
|
)
|
|
|
|
elseif(UNIX) ## LINUX and similar
|
|
install(TARGETS MultiMC
|
|
BUNDLE DESTINATION . COMPONENT Runtime
|
|
RUNTIME DESTINATION bin COMPONENT Runtime
|
|
)
|
|
install(PROGRAMS package/linux/MultiMC DESTINATION .)
|
|
|
|
elseif(WIN32) ## WINDOWS
|
|
install(TARGETS MultiMC
|
|
BUNDLE DESTINATION . COMPONENT Runtime
|
|
LIBRARY DESTINATION . COMPONENT Runtime
|
|
RUNTIME DESTINATION . COMPONENT Runtime
|
|
)
|
|
endif()
|
|
|
|
#### Java bits ####
|
|
install_jar(JavaCheck "${BINARY_DEST_DIR}/jars")
|
|
install_jar(NewLaunch "${BINARY_DEST_DIR}/jars")
|
|
|
|
#### Dist package logic ####
|
|
|
|
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" 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" EXCLUDE
|
|
REGEX "d\\." EXCLUDE
|
|
REGEX "_debug\\." EXCLUDE
|
|
)
|
|
# Icon engines
|
|
install(
|
|
DIRECTORY "${QT_PLUGINS_DIR}/iconengines"
|
|
DESTINATION ${PLUGIN_DEST_DIR}
|
|
COMPONENT Runtime
|
|
REGEX "fontawesome" EXCLUDE
|
|
REGEX "d\\." EXCLUDE
|
|
REGEX "_debug\\." 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
|
|
)
|
|
if(APPLE)
|
|
# Accessible plugin to make buttons look decent on osx
|
|
if("${Qt5Core_VERSION_STRING}" VERSION_LESS "5.4.0")
|
|
message(STATUS "Packaging the Qt accessible plugins because we're on Qt ${Qt5Core_VERSION_STRING}")
|
|
install(
|
|
DIRECTORY "${QT_PLUGINS_DIR}/accessible"
|
|
DESTINATION ${PLUGIN_DEST_DIR}
|
|
COMPONENT Runtime
|
|
REGEX "quick" EXCLUDE
|
|
REGEX "d\\." EXCLUDE
|
|
REGEX "_debug\\." EXCLUDE
|
|
)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
# qtconf
|
|
install(
|
|
CODE "
|
|
file(WRITE \"\${CMAKE_INSTALL_PREFIX}/${QTCONF_DEST_DIR}/qt.conf\" \"\")
|
|
"
|
|
COMPONENT Runtime
|
|
)
|
|
|
|
# ICNS file for OS X
|
|
if(APPLE)
|
|
install(FILES resources/MultiMC.icns DESTINATION MultiMC.app/Contents/Resources)
|
|
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)
|
|
|
|
|
|
|
|
######## Package ########
|
|
|
|
# Package with CPack
|
|
if(UNIX)
|
|
if(APPLE)
|
|
set(CPACK_GENERATOR "ZIP")
|
|
else()
|
|
set(CPACK_GENERATOR "TGZ")
|
|
endif()
|
|
elseif(WIN32)
|
|
set(CPACK_GENERATOR "ZIP")
|
|
endif()
|
|
set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY 0)
|
|
|
|
set(CPACK_PACKAGE_NAME "MultiMC 5")
|
|
set(CPACK_PACKAGE_VENDOR "")
|
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MultiMC - Minecraft launcher and management tool.")
|
|
set(CPACK_PACKAGE_VERSION "${MultiMC_VERSION_MAJOR}.${MultiMC_VERSION_MINOR}.${MultiMC_VERSION_REV}.${MultiMC_VERSION_BUILD}")
|
|
set(CPACK_PACKAGE_VERSION_MAJOR ${MultiMC_VERSION_MAJOR})
|
|
set(CPACK_PACKAGE_VERSION_MINOR ${MultiMC_VERSION_MINOR})
|
|
set(CPACK_PACKAGE_VERSION_PATCH ${MultiMC_VERSION_REV})
|
|
|
|
set(CPACK_PACKAGE_FILE_NAME "MultiMC")
|
|
|
|
include(CPack)
|