summaryrefslogtreecommitdiffstats
path: root/application/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'application/CMakeLists.txt')
-rw-r--r--application/CMakeLists.txt473
1 files changed, 473 insertions, 0 deletions
diff --git a/application/CMakeLists.txt b/application/CMakeLists.txt
new file mode 100644
index 00000000..58a90efa
--- /dev/null
+++ b/application/CMakeLists.txt
@@ -0,0 +1,473 @@
+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 5)
+
+# 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.")
+
+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}")
+
+# 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()
+
+#### Updater-related build config options ####
+option(MultiMC_UPDATER_DRY_RUN "Enable updater dry-run mode -- for updater development." OFF)
+option(MultiMC_UPDATER_FORCE_LOCAL "Do not download updated updater -- for updater development." OFF)
+
+if(MultiMC_UPDATER_DRY_RUN)
+ set(MultiMC_UPDATER_DRY_RUN_value "true")
+else()
+ set(MultiMC_UPDATER_DRY_RUN_value "false")
+endif()
+
+if(MultiMC_UPDATER_FORCE_LOCAL)
+ set(MultiMC_UPDATER_FORCE_LOCAL_value "true")
+else()
+ set(MultiMC_UPDATER_FORCE_LOCAL_value "false")
+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 2014 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
+
+ # GUI - windows
+ MainWindow.h
+ MainWindow.cpp
+ ConsoleWindow.h
+ ConsoleWindow.cpp
+
+ # page provider for instances
+ InstancePageProvider.h
+ InstancePageProvider.cpp
+
+ # Annoying nag screen logic
+ NagUtils.h
+ NagUtils.cpp
+
+
+ # GUI - page dialog pages
+ pages/BasePage.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
+
+ # 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/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
+
+
+ # 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
+
+ # 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/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
+)
+
+######## 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 Qt5::WebKitWidgets
+ ${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
+ install(
+ DIRECTORY "${QT_PLUGINS_DIR}/accessible"
+ DESTINATION ${PLUGIN_DEST_DIR}
+ COMPONENT Runtime
+ REGEX "quick" EXCLUDE
+ REGEX "d\\." EXCLUDE
+ REGEX "_debug\\." EXCLUDE
+ )
+ 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)