diff --git a/CMakeLists.txt b/CMakeLists.txt index 78a7047..8eda960 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -213,6 +213,7 @@ project( DESCRIPTION "Additional sources, filters, transitions and encoders for OBS Studio." HOMEPAGE_URL "https://streamfx.xaymar.com/" ) +set(PROJECT_IDENTIFER "com.xaymar.${PROJECT_NAME}.obs") set(PROJECT_TITLE "StreamFX (for OBS Studio)") set(PROJECT_AUTHORS "Michael Fabian 'Xaymar' Dirks ") set(PROJECT_COPYRIGHT "2017 - 2022, Michael Fabian Dirks. All Rights Reserved") @@ -370,6 +371,8 @@ if(STANDALONE) set(STRUCTURE_UNIFIED CACHE BOOL "Install for use in a Plugin Manager") if(D_PLATFORM_LINUX) set(STRUCTURE_PACKAGEMANAGER CACHE BOOL "Install for use in a Package Manager (system-wide installation)") + elseif(D_PLATFORM_MAC) + set(STRUCTURE_BUNDLE ON CACHE BOOL "Install as a Loadable Bundle (.plugin)") endif() set(PACKAGE_PREFIX "${CMAKE_BINARY_DIR}" CACHE PATH "Where to place the packages?") @@ -2015,6 +2018,41 @@ if(D_PLATFORM_MAC) BUILD_WITH_INSTALL_RPATH ON ) endif() + + # Bundle exporting + if(STRUCTURE_BUNDLE) + # Proper location for resources in Bundles + foreach(FILE IN LISTS PROJECT_DATA) + cmake_path(ABSOLUTE_PATH FILE OUTPUT_VARIABLE FILE_PATH) + cmake_path(RELATIVE_PATH FILE_PATH BASE_DIRECTORY "${PROJECT_SOURCE_DIR}/data/") + cmake_path(GET FILE_PATH PARENT_PATH FILE_PATH) + set_source_files_properties("${FILE}" PROPERTIES + MACOSX_PACKAGE_LOCATION "Resources/${FILE_PATH}" + ) + endforeach() + + # Bundle Icon + set_source_files_properties("media/icon.png" PROPERTIES + MACOSX_PACKAGE_LOCATION "Resources" + ) + + # Bundle Information + set(MACOSX_BUNDLE_BUNDLE_NAME "${PROJECT_NAME}") + set(MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}") + set(MACOSX_BUNDLE_COPYRIGHT "${PROJECT_COPYRIGHT}") + set(MACOSX_BUNDLE_GUI_IDENTIFIER "${PROJECT_IDENTIFER}") + set(MACOSX_BUNDLE_ICON_FILE "icon.png") + set(MACOSX_BUNDLE_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") + set(MACOSX_BUNDLE_LONG_VERSION_STRING "${_VERSION}") + set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION}") + set_target_properties(${PROJECT_NAME} PROPERTIES + BUNDLE ON + BUNDLE_EXTENSION "plugin" + OUTPUT_NAME ${PROJECT_NAME} + MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR}/templates/macos/Info.plist.in" + XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "${MACOSX_BUNDLE_GUI_IDENTIFIER}" + ) + endif() endif() ################################################################################ @@ -2171,19 +2209,29 @@ if(STANDALONE) ) endif() elseif(D_PLATFORM_MAC) - install( - TARGETS ${PROJECT_NAME} - RUNTIME DESTINATION "${PROJECT_NAME}/bin/" COMPONENT StreamFX - LIBRARY DESTINATION "${PROJECT_NAME}/bin/" COMPONENT StreamFX - PERMISSIONS WORLD_EXECUTE;WORLD_READ;OWNER_EXECUTE;OWNER_READ;OWNER_WRITE;GROUP_EXECUTE;GROUP_READ;GROUP_WRITE - ) - install( - DIRECTORY "data/" - DESTINATION "${PROJECT_NAME}/data/" - COMPONENT StreamFX - FILE_PERMISSIONS WORLD_EXECUTE;WORLD_READ;OWNER_EXECUTE;OWNER_READ;OWNER_WRITE;GROUP_EXECUTE;GROUP_READ;GROUP_WRITE - DIRECTORY_PERMISSIONS WORLD_EXECUTE;WORLD_READ;OWNER_EXECUTE;OWNER_READ;OWNER_WRITE;GROUP_EXECUTE;GROUP_READ;GROUP_WRITE - ) + if(STRUCTURE_BUNDLE) + install( + TARGETS ${PROJECT_NAME} + RUNTIME DESTINATION "." COMPONENT StreamFX + LIBRARY DESTINATION "." COMPONENT StreamFX + BUNDLE DESTINATION "." COMPONENT StreamFX + PERMISSIONS WORLD_EXECUTE;WORLD_READ;OWNER_EXECUTE;OWNER_READ;OWNER_WRITE;GROUP_EXECUTE;GROUP_READ;GROUP_WRITE + ) + else() + install( + TARGETS ${PROJECT_NAME} + RUNTIME DESTINATION "${PROJECT_NAME}/bin/" COMPONENT StreamFX + LIBRARY DESTINATION "${PROJECT_NAME}/bin/" COMPONENT StreamFX + PERMISSIONS WORLD_EXECUTE;WORLD_READ;OWNER_EXECUTE;OWNER_READ;OWNER_WRITE;GROUP_EXECUTE;GROUP_READ;GROUP_WRITE + ) + install( + DIRECTORY "data/" + DESTINATION "${PROJECT_NAME}/data/" + COMPONENT StreamFX + FILE_PERMISSIONS WORLD_EXECUTE;WORLD_READ;OWNER_EXECUTE;OWNER_READ;OWNER_WRITE;GROUP_EXECUTE;GROUP_READ;GROUP_WRITE + DIRECTORY_PERMISSIONS WORLD_EXECUTE;WORLD_READ;OWNER_EXECUTE;OWNER_READ;OWNER_WRITE;GROUP_EXECUTE;GROUP_READ;GROUP_WRITE + ) + endif() endif() else() if(COMMAND setup_plugin_target) @@ -2296,6 +2344,10 @@ if(STANDALONE) # Apple MacOS if(D_PLATFORM_MAC) # .pkg Installer + set(PACKAGES_PATH_NAME "${PROJECT_NAME}") + if(STRUCTURE_BUNDLE) + set(PACKAGES_PATH_NAME "${PACKAGES_PATH_NAME}.plugin") + endif() configure_file( "templates/macos/installer.pkgproj.in" "installer.pkgproj" diff --git a/templates/macos/Info.plist.in b/templates/macos/Info.plist.in new file mode 100644 index 0000000..66c46b6 --- /dev/null +++ b/templates/macos/Info.plist.in @@ -0,0 +1,51 @@ + + + + + CFBundleInfoDictionaryVersion + 6.0 + + CFBundleSupportedPlatforms + + MacOSX + + + CFBundlePackageType + BNDL + + CFBundleDevelopmentRegion + English + + CFBundleIdentifier + ${MACOSX_BUNDLE_GUI_IDENTIFIER} + + CFBundleName + ${MACOSX_PLUGIN_BUNDLE_NAME} + CFBundleDisplayName + ${MACOSX_PLUGIN_BUNDLE_NAME} + + CFBundleIconFile + ${MACOSX_BUNDLE_ICON_FILE} + + CFBundleExecutable + ${MACOSX_PLUGIN_EXECUTABLE_NAME} + + CFBundleVersion + ${MACOSX_BUNDLE_VERSION_STRING} + CFBundleShortVersionString + ${MACOSX_BUNDLE_SHORT_VERSION_STRING} + CFBundleLongVersionString + ${MACOSX_BUNDLE_LONG_VERSION_STRING} + + CSResourcesFileMapped + + + CFBundleGetInfoString + ${MACOSX_BUNDLE_COPYRIGHT} + NSHumanReadableCopyright + ${MACOSX_BUNDLE_COPYRIGHT} + + LSMinimumSystemVersion + ${CMAKE_OSX_DEPLOYMENT_TARGET} + + diff --git a/templates/macos/installer.pkgproj.in b/templates/macos/installer.pkgproj.in index 2c33be4..516fa7e 100644 --- a/templates/macos/installer.pkgproj.in +++ b/templates/macos/installer.pkgproj.in @@ -37,14 +37,63 @@ CHILDREN + BUNDLE_CAN_DOWNGRADE + + BUNDLE_POSTINSTALL_PATH + + PATH_TYPE + 0 + + BUNDLE_PREINSTALL_PATH + + PATH_TYPE + 0 + CHILDREN GID 80 + LOCATORS + + + DICTIONARY + + BUNDLE_IDENTIFIER + com.xaymar.StreamFX.obs + DEFAULT_PATH + /Library/Application Support/obs-studio/plugins + PREFER_DEFAULT_PATH + 0 + + IDENTIFIER + fr.whitebox.Packages.locator.standard + NAME + com.xaymar.StreamFX.obs + STATE + + + + DICTIONARY + + BUNDLE_IDENTIFIER + com.xaymar.StreamFX + DEFAULT_PATH + /Library/Application Support/obs-studio/plugins + PREFER_DEFAULT_PATH + 0 + + IDENTIFIER + fr.whitebox.Packages.locator.standard + NAME + com.xaymar.StreamFX + STATE + + + PATH - @CMAKE_INSTALL_PREFIX@/StreamFX + @CMAKE_INSTALL_PREFIX@/@PACKAGES_PATH_NAME@ PATH_TYPE - 3 + 1 PERMISSIONS 493 TYPE @@ -58,9 +107,9 @@ PATH plugins PATH_TYPE - 0 + 2 PERMISSIONS - 493 + 509 TYPE 2 UID @@ -72,9 +121,9 @@ PATH obs-studio PATH_TYPE - 0 + 2 PERMISSIONS - 493 + 509 TYPE 2 UID @@ -445,22 +494,6 @@ UID 0 - - CHILDREN - - GID - 80 - PATH - Applications - PATH_TYPE - 0 - PERMISSIONS - 509 - TYPE - 1 - UID - 0 - GID 0 @@ -506,19 +539,19 @@ PACKAGE_SETTINGS AUTHENTICATION - 1 + 0 CONCLUSION_ACTION 0 FOLLOW_SYMBOLIC_LINKS IDENTIFIER - com.xaymar.@PROJECT_NAME@ + ${PROJECT_IDENTIFER} LOCATION 0 NAME @PROJECT_NAME@ OVERWRITE_PERMISSIONS - + PAYLOAD_SIZE -1 REFERENCE_PATH @@ -526,7 +559,7 @@ RELOCATABLE USE_HFS+_COMPRESSION - + VERSION @PROJECT_VERSION@ @@ -574,7 +607,7 @@ OPTIONS HIDDEN - + STATE 1 @@ -593,7 +626,7 @@ MODE - 1 + 0 INSTALLATION_STEPS @@ -669,7 +702,7 @@ VALUE PATH - @PROJECT_SOURCE_DIR@/license + @PROJECT_SOURCE_DIR@/LICENSE PATH_TYPE 0 @@ -706,14 +739,14 @@ DICTIONARY IC_REQUIREMENT_OS_DISK_TYPE - 0 + 1 IC_REQUIREMENT_OS_DISTRIBUTION_TYPE 0 IC_REQUIREMENT_OS_MINIMUM_VERSION 101500 IC_REQUIREMENT_CHECK_TYPE - 1 + 0 IDENTIFIER fr.whitebox.Packages.requirement.os MESSAGE