summaryrefslogtreecommitdiffstats
path: root/mkspecs/features/mac/asset_catalogs.prf
blob: 123a0e0fcd326deba4df67f15e870a10ebea56bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# 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_LAUNCH_IMAGE
# Name of the launch image resource in the asset catalogs that will be used as the launch image.
#
# 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
        }

        !isEmpty(QMAKE_ASSET_CATALOGS_LAUNCH_IMAGE) {
            asset_catalog_launchimage.name = "ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME"
            asset_catalog_launchimage.value = $$QMAKE_ASSET_CATALOGS_LAUNCH_IMAGE
            QMAKE_MAC_XCODE_SETTINGS += asset_catalog_launchimage
        }

        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)
        }

        !isEmpty(QMAKE_ASSET_CATALOGS_LAUNCH_IMAGE) {
            asset_catalog_launch_image_arg = \
                --launch-image $$shell_quote($$QMAKE_ASSET_CATALOGS_LAUNCH_IMAGE)
        }

        asset_catalog_compiler.target = $$OUT_PWD/asset_catalog_compiler.Info.plist
        asset_catalog_compiler.commands = $$shell_quote($$QMAKE_ACTOOL) \
            $$asset_catalog_app_icon_arg \
            $$asset_catalog_launch_image_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) | sed -Ene \'s/^ +//p\', 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()
    }
}