diff options
Diffstat (limited to 'mkspecs/features/mac/asset_catalogs.prf')
-rw-r--r-- | mkspecs/features/mac/asset_catalogs.prf | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/mkspecs/features/mac/asset_catalogs.prf b/mkspecs/features/mac/asset_catalogs.prf new file mode 100644 index 0000000000..57d93d56d5 --- /dev/null +++ b/mkspecs/features/mac/asset_catalogs.prf @@ -0,0 +1,109 @@ +# QMAKE_ASSET_CATALOGS +# Paths to xcassets directories to be compiled +# +# QMAKE_ASSET_CATALOGS_BUILD_PATH +# Location which asset catalogs will be compiled to. +# If the current target is an app bundle, defaults to its Resources directory. +# Otherwise, this value must be set manually. +# +# QMAKE_ASSET_CATALOGS_APP_ICON +# Name of the icon resource in the asset catalogs that will be used as the app icon. +# Defaults to AppIcon. +# +# QMAKE_ASSET_CATALOGS_INSTALL_PATH +# Base path to install files to. Falls back to a path relative to the target install path, +# based on QMAKE_ASSET_CATALOGS_BUILD_PATH. + +!have_target|if(!build_pass:!isEmpty(BUILDS)): \ + return() + +!isEmpty(QMAKE_ASSET_CATALOGS) { + load(resolve_target) + + isEmpty(QMAKE_ASSET_CATALOGS_BUILD_PATH) { + !isEmpty(QMAKE_RESOLVED_BUNDLE):equals(TEMPLATE, app):app_bundle { + macos: \ + QMAKE_ASSET_CATALOGS_BUILD_PATH = $$QMAKE_RESOLVED_BUNDLE/Contents/Resources + else: \ + QMAKE_ASSET_CATALOGS_BUILD_PATH = $$QMAKE_RESOLVED_BUNDLE + } else { + error("QMAKE_ASSET_CATALOGS_BUILD_PATH must be set when using QMAKE_ASSET_CATALOGS.") + } + } + + QMAKE_ASSET_CATALOGS_BUILD_PATH = $$clean_path($$QMAKE_ASSET_CATALOGS_BUILD_PATH) + + macx-xcode { + !isEmpty(QMAKE_ASSET_CATALOGS_APP_ICON) { + asset_catalog_appicon.name = "ASSETCATALOG_COMPILER_APPICON_NAME" + asset_catalog_appicon.value = $$QMAKE_ASSET_CATALOGS_APP_ICON + QMAKE_MAC_XCODE_SETTINGS += asset_catalog_appicon + } + + asset_catalog_compiler.files = $$QMAKE_ASSET_CATALOGS + macos: asset_catalog_compiler.path = Contents/Resources + QMAKE_BUNDLE_DATA += asset_catalog_compiler + } else { + !isEmpty(QMAKE_ASSET_CATALOGS_APP_ICON) { + asset_catalog_app_icon_arg = \ + --app-icon $$shell_quote($$QMAKE_ASSET_CATALOGS_APP_ICON) + } + + asset_catalog_compiler.target = $$OUT_PWD/asset_catalog_compiler.Info.plist + asset_catalog_compiler.commands = $$shell_quote($$QMAKE_ACTOOL) \ + $$asset_catalog_app_icon_arg \ + --output-partial-info-plist $$shell_quote($$asset_catalog_compiler.target) \ + --platform $${version_identifier} \ + --minimum-deployment-target $${deployment_target} \ + --compile $$shell_quote($$QMAKE_ASSET_CATALOGS_BUILD_PATH) + + for (catalog, QMAKE_ASSET_CATALOGS) { + asset_catalog_compiler.commands += $${catalog} + asset_catalog_compiler.depends += $$files($$catalog/*, true) + } + + actool_output_files = $$system(\ + mkdir -p $$system_quote($$QMAKE_ASSET_CATALOGS_BUILD_PATH) && \ + /usr/libexec/PlistBuddy -c \'Print :com.apple.actool.compilation-results:output-files\' \ + /dev/stdin <<< $($${asset_catalog_compiler.commands} 2>/dev/null) | grep \'^ .*$\', lines) + + for (output_file, actool_output_files) { + !equals(output_file, $$asset_catalog_compiler.target): \ + actool_output_files_rel += $$relative_path($$output_file, $$QMAKE_ASSET_CATALOGS_BUILD_PATH) + } + + QMAKE_EXTRA_TARGETS += asset_catalog_compiler + PRE_TARGETDEPS += $$asset_catalog_compiler.target + + isEmpty(QMAKE_ASSET_CATALOGS_INSTALL_PATH) { + !isEmpty(target.path): \ + QMAKE_ASSET_CATALOGS_INSTALL_PATH = $${target.path}/ + QMAKE_ASSET_CATALOGS_INSTALL_PATH = $${QMAKE_ASSET_CATALOGS_INSTALL_PATH}$$relative_path(\ + $$QMAKE_ASSET_CATALOGS_BUILD_PATH, $$absolute_path($$DESTDIR, $$OUT_PWD)) + } + + for (ac_install_file, actool_output_files_rel) { + asset_catalogs_files.files += \ + $$QMAKE_ASSET_CATALOGS_BUILD_PATH/$$ac_install_file + } + contains(INSTALLS, target): asset_catalogs_files.depends += install_target + asset_catalogs_files.path = $$QMAKE_ASSET_CATALOGS_INSTALL_PATH + asset_catalogs_files.CONFIG += no_check_exist + INSTALLS += asset_catalogs_files + } +} else: macx-xcode { + # Backwards compatibility + for (bundle_data, QMAKE_BUNDLE_DATA) { + for (bundle_file, $${bundle_data}.files) { + !contains(bundle_file, .*\.xcassets$): next() + warning("*.xcassets in QMAKE_BUNDLE_DATA is deprecated. Use QMAKE_ASSET_CATALOGS instead.") + !exists($$absolute_path($$bundle_file/AppIcon.appiconset, $$_PRO_FILE_PWD_)): next() + + asset_catalog_appicon.name = "ASSETCATALOG_COMPILER_APPICON_NAME" + asset_catalog_appicon.value = "AppIcon" + QMAKE_MAC_XCODE_SETTINGS += asset_catalog_appicon + break() + } + !isEmpty(asset_catalog_appicon.name): break() + } +} |