diff --git a/CMakeLists.txt b/CMakeLists.txt index 55007410..d5038253 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -463,7 +463,7 @@ if (NOT ISLE_MINIWIN) endif() if (ISLE_BUILD_APP) - add_executable(isle WIN32 + add_executable(isle WIN32 MACOSX_BUNDLE ISLE/res/isle.rc ISLE/isleapp.cpp ) @@ -627,6 +627,7 @@ endif() install(TARGETS isle ${install_extra_targets} RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + BUNDLE DESTINATION "." ) if(EMSCRIPTEN) install(FILES "$/isle.js" "$/isle.wasm" @@ -638,6 +639,33 @@ set(CPACK_PACKAGE_DIRECTORY "dist") set(CPACK_PACKAGE_FILE_NAME "isle-${PROJECT_VERSION}-${ISLE_PACKAGE_NAME}-${CMAKE_SYSTEM_PROCESSOR}") if(MSVC) set(CPACK_GENERATOR ZIP) +elseif(APPLE) + set(MACOSX_BUNDLE_GUI_IDENTIFIER com.github.isledecomp.isle-portable) + set(MACOSX_BUNDLE_COPYRIGHT LGPLv3) + set(MACOSX_BUNDLE_BUNDLE_NAME isle) + set(MACOSX_BUNDLE_DISPLAY_NAME LEGO Island) + set(MACOSX_BUNDLE_INFO_STRING ${PROJECT_VERSION}) + set(MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}) + set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION}) + set(MACOSX_BUNDLE_LONG_VERSION_STRING "Version ${PROJECT_VERSION}") + + # TODO: darwin < 9 + set(MACOSX_BUNDLE_REQUIRED_PLATFORM Carbon) + set(_icon_file AppIcon) + + target_sources(isle PRIVATE "ISLE/apple/${_icon_file}.icns") + set_source_files_properties("./ISLE/apple/${_icon_file}.icns" PROPERTIES MACOSX_PACKAGE_LOCATION Resources) + set_target_properties(isle PROPERTIES MACOSX_BUNDLE_ICON_FILE "${_icon_file}.icns") + set_target_properties(isle PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/ISLE/apple/Info.plist") + + install(TARGETS isle DESTINATION ./) + install(CODE " + include(BundleUtilities) + fixup_bundle(${CMAKE_BINARY_DIR}/${MACOSX_BUNDLE_BUNDLE_NAME}.app \"\" \"\") + " + COMPONENT Runtime) + + set(CPACK_GENERATOR DragNDrop) else() set(CPACK_GENERATOR TGZ) endif() diff --git a/ISLE/apple/AppIcon.icns b/ISLE/apple/AppIcon.icns new file mode 100644 index 00000000..61aa735e Binary files /dev/null and b/ISLE/apple/AppIcon.icns differ diff --git a/ISLE/apple/Info.plist b/ISLE/apple/Info.plist new file mode 100644 index 00000000..641faa16 --- /dev/null +++ b/ISLE/apple/Info.plist @@ -0,0 +1,80 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${MACOSX_BUNDLE_EXECUTABLE_NAME} + CFBundleGetInfoString + ${MACOSX_BUNDLE_INFO_STRING} + CFBundleIconFile + ${MACOSX_BUNDLE_ICON_FILE} + CFBundleIdentifier + ${MACOSX_BUNDLE_GUI_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleLongVersionString + ${MACOSX_BUNDLE_LONG_VERSION_STRING} + CFBundleName + ${MACOSX_BUNDLE_BUNDLE_NAME} + CFBundleDisplayName + ${MACOSX_BUNDLE_DISPLAY_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + ${MACOSX_BUNDLE_SHORT_VERSION_STRING} + CFBundleSignature + ???? + CFBundleVersion + ${MACOSX_BUNDLE_BUNDLE_VERSION} + UILaunchStoryboardName + LaunchScreen + NSHighResolutionCapable + + CSResourcesFileMapped + + LSRequires${MACOSX_BUNDLE_REQUIRED_PLATFORM} + + NSHumanReadableCopyright + ${MACOSX_BUNDLE_COPYRIGHT} + SDL_FILESYSTEM_BASE_DIR_TYPE + resource + NSSupportsAutomaticGraphicsSwitching + + UIApplicationSupportsIndirectInputEvents + + LSSupportsOpeningDocumentsInPlace + + UIFileSharingEnabled + + CADisableMinimumFrameDurationOnPhone + + UIDeviceFamily + + 1 + 2 + + UIRequiresFullScreen + + UIStatusBarHidden + + UISupportedInterfaceOrientations + + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + + CFBundleAllowMixedLocalizations + + + \ No newline at end of file