diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e5e6a387c..2a7788ddca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,6 +60,8 @@ option(DOWNLOAD_OBJECTS "Download objects during installation." ON) CMAKE_DEPENDENT_OPTION(DOWNLOAD_REPLAYS "Download replays during installation." ON "WITH_TESTS" OFF) option(MACOS_USE_DEPENDENCIES "Use OpenRCT2 dependencies instead of system libraries" ON) +CMAKE_DEPENDENT_OPTION(MACOS_BUNDLE "Build macOS application bundle (OpenRCT2.app)" OFF + "MACOS_USE_DEPENDENCIES; NOT DISABLE_GUI" OFF) # Options option(STATIC "Create a static build.") @@ -435,7 +437,7 @@ if (DOWNLOAD_REPLAYS) endif () install(TARGETS "libopenrct2" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") -if(NOT DISABLE_GUI) +if(NOT DISABLE_GUI AND NOT MACOS_BUNDLE) install(TARGETS "openrct2" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") endif() install(TARGETS "openrct2-cli" OPTIONAL RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") diff --git a/distribution/macos/Info.plist b/distribution/macos/Info.plist index 800f356eaa..f7fd4c88c5 100644 --- a/distribution/macos/Info.plist +++ b/distribution/macos/Info.plist @@ -3,13 +3,13 @@ CFBundleExecutable - $(EXECUTABLE_NAME) + ${EXECUTABLE_NAME} CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) + ${PRODUCT_BUNDLE_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleName - $(PRODUCT_NAME) + ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString @@ -17,7 +17,7 @@ CFBundleSignature ORCT LSMinimumSystemVersion - $(MACOSX_DEPLOYMENT_TARGET) + ${MACOSX_DEPLOYMENT_TARGET} NSHumanReadableCopyright OpenRCT2 is licensed under the GNU General Public License version 3 CFBundleAllowMixedLocalizations diff --git a/src/openrct2-ui/CMakeLists.txt b/src/openrct2-ui/CMakeLists.txt index 49b8bc55fd..054a9f91de 100644 --- a/src/openrct2-ui/CMakeLists.txt +++ b/src/openrct2-ui/CMakeLists.txt @@ -127,3 +127,69 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") get_target_property(OPENRCT2_INCLUDE_DIRS ${PROJECT_NAME} INCLUDE_DIRECTORIES) set_target_properties(${PROJECT_NAME}-headers-check PROPERTIES INCLUDE_DIRECTORIES "${OPENRCT2_INCLUDE_DIRS}") endif () + + +if(MACOS_BUNDLE) + add_dependencies(${PROJECT_NAME} openrct2-cli) + set(OUTPUT_NAME "OpenRCT2") + set(MACOS_APP_NAME "${OUTPUT_NAME}.app") + set(BUNDLE_FRAMEWORK_DIR "${MACOS_APP_NAME}/Contents/Frameworks") + set(BUNDLE_RESOURCE_DIR "${MACOS_APP_NAME}/Contents/Resources") + set(SOURCE_DATA_DIR "${ROOT_DIR}/data") + + # Add distribution sources + target_sources(${PROJECT_NAME} + PUBLIC distribution/readme.txt + PUBLIC distribution/changelog.txt + PUBLIC g2.dat + PUBLIC resources/mac/openrct2.icns + PUBLIC ${SOURCE_DATA_DIR}/language + PUBLIC ${SOURCE_DATA_DIR}/object + PUBLIC ${SOURCE_DATA_DIR}/sequence + ) + + # Specify the resources to move to the bundle + set(BUNDLE_RESOURCES + distribution/readme.txt + distribution/changelog.txt + g2.dat + resources/mac/openrct2.icns + ${SOURCE_DATA_DIR}/language + ${SOURCE_DATA_DIR}/object + ${SOURCE_DATA_DIR}/sequence + ) + + + if(${OPENRCT2_BRANCH} EQUAL master) + set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${OPENRCT2_VERSION_TAG}") + else() + set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${OPENRCT2_VERSION_TAG} ${OPENRCT2_BRANCH}") + endif() + + set(PRODUCT_BUNDLE_IDENTIFIER "io.openrct2.OpenRCT2") + set(MACOSX_BUNDLE_BUNDLE_VERSION "${OPENRCT2_COMMIT_SHA1_SHORT}") + set(EXECUTABLE_NAME "${OUTPUT_NAME}") + set(MACOSX_DEPLOYMENT_TARGET "${CMAKE_OSX_DEPLOYMENT_TARGET}") + set(PRODUCT_NAME "${OUTPUT_NAME}") + + # copy data + file(COPY ${SOURCE_DATA_DIR}/language DESTINATION "${BUNDLE_RESOURCE_DIR}") + file(COPY ${SOURCE_DATA_DIR}/object DESTINATION "${BUNDLE_RESOURCE_DIR}") + file(COPY ${SOURCE_DATA_DIR}/sequence DESTINATION "${BUNDLE_RESOURCE_DIR}") + + # Create as a bundle + set_target_properties(${PROJECT_NAME} PROPERTIES + MACOSX_BUNDLE ON + OUTPUT_NAME ${OUTPUT_NAME} + MACOSX_BUNDLE_BUNDLE_NAME ${OUTPUT_NAME} + MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/distribution/macos/Info.plist + RESOURCE "${BUNDLE_RESOURCES}") + + install(CODE " + include(BundleUtilities) + fixup_bundle(${CMAKE_BINARY_DIR}/${MACOS_APP_NAME} \"\" \"\") + verify_app(${CMAKE_BINARY_DIR}/${MACOS_APP_NAME}) + " BUNDLE DESTINATION ${CMAKE_BINARY_DIR} + ) + +endif ()