f4b2115b51
Previously we hardcoded the minimum windows version to the initial Windows 10 release. However features have been added which require a higher SDK version (eg drag and drop). Deploying such a package might fail during distribution to consumer devices. Hence introduce WINRT_MANIFEST.minVersion and WINRT_MANIFEST.maxVersionTested as variables for the manifest file. If nothing is specified, both values will be set to the UCRTVersion environment variable, implying the development setup from which qmake has been invoked. Change-Id: I1dcf1e75c67c4ab2fd5a3fdcc32c8783a336e6ff Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
197 lines
12 KiB
Plaintext
197 lines
12 KiB
Plaintext
# This performs basic variable replacement on the contents of the WinRT manifest template, as
|
|
# specified by WINRT_MANIFEST. The resulting manifest file is written to the output directory.
|
|
# While the most common options are covered by the default template, the developer is expected
|
|
# to make an application-level copy of the template in order to customize the manifest further.
|
|
# Afterwards, they can override the default template by assigning their template to WINRT_MANIFEST.
|
|
#
|
|
# All subkeys in WINRT_MANIFEST will be replaced if defined/found, so new variables can be easily
|
|
# added. The following keys have default values and are present in the default templates:
|
|
# WINRT_MANIFEST: The name of the input manifest file. Defaults to a file defined by the mkspec.
|
|
# WINRT_MANIFEST.target: The name of the target (.exe). Defaults to TARGET.
|
|
# WINRT_MANIFEST.identity: The unique ID of the app. Defaults to reusing the existing generated manifest's UUID, or generates a new UUID if none is present.
|
|
# WINRT_MANIFEST.name: The name of the package as displayed to the user. Defaults to TARGET.
|
|
# WINRT_MANIFEST.architecture: The target architecture. Defaults to VCPROJ_ARCH.
|
|
# WINRT_MANIFEST.version: The version number of the package. Defaults to "1.0.0.0".
|
|
# WINRT_MANIFEST.publisher: Display name of the publisher. Defaults to "Default publisher display name".
|
|
# WINRT_MANIFEST.publisher_id: The publisher's distinguished name (default: CN=MyCN).
|
|
# WINRT_MANIFEST.phone_product_id: The GUID of the product. Defaults to the value of WINRT_MANIFEST.identity. (Windows Phone only)
|
|
# WINRT_MANIFEST.phone_publisher_id: The GUID of the publisher. Defaults to an invalid GUID. (Windows Phone only)
|
|
# WINRT_MANIFEST.description: Package description. Defaults to "Default package description".
|
|
# WINRT_MANIFEST.background: Tile background color. Defaults to "green".
|
|
# WINRT_MANIFEST.foreground: Tile foreground (text) color (Windows 8/RT only). Defaults to "light".
|
|
# WINRT_MANIFEST.logo_store: Logo image file for Windows Store. Default provided by the mkspec.
|
|
# WINRT_MANIFEST.logo_small: Small logo image file. Default provided by the mkspec.
|
|
# WINRT_MANIFEST.logo_medium: Medium logo image file. Default provided by the mkspec.
|
|
# WINRT_MANIFEST.logo_large: Large logo image file. Default provided by the mkspec.
|
|
# WINRT_MANIFEST.splash_screen: Splash screen image file. Default provided by the mkspec.
|
|
# WINRT_MANIFEST.rotation_preference: Orientation specification. Default is empty. (portrait, landscape, landscapeFlipped)
|
|
# WINRT_MANIFEST.iconic_tile_icon: Image file for the "iconic" tile template icon. Default provided by the mkspec.
|
|
# WINRT_MANIFEST.iconic_tile_small: Image file for the small "iconic" tile template logo. Default provided by the mkspec.
|
|
# WINRT_MANIFEST.default_language: Specifies the default language of the application
|
|
# WINRT_MANIFEST.capabilities: Specifies capabilities to add to the capability list.
|
|
# WINRT_MANIFEST.capabilities_device: Specifies device capabilities to add to the capability list. (location, webcam...)
|
|
# WINRT_MANIFEST.dependencies: Specifies dependencies required by the package.
|
|
# WINRT_MANIFEST.minVersion: Specifies the minimum required Windows version to run the package. Defaults to %UCRTVersion%
|
|
# WINRT_MANIFEST.maxVersionTested: Specifies the maximum Windows version the package has been tested against. Defaults to WINRT_MANIFEST.minVersion
|
|
|
|
# The manifest is generated for each build pass for normal apps, and only once for vcapps.
|
|
# - Normal apps have their package root directory in the same place as the target (one for each build pass).
|
|
# - Visual Studio requires a design-mode manifest in the same location as the vcproj.
|
|
!isEmpty(WINRT_MANIFEST): \
|
|
if(build_pass:equals(TEMPLATE, "app"))| \
|
|
if(!build_pass:equals(TEMPLATE, "vcapp")) {
|
|
|
|
manifest_file.input = $$WINRT_MANIFEST
|
|
|
|
contains(TEMPLATE, "vc.*") {
|
|
BUILD_DIR = $$OUT_PWD
|
|
} else {
|
|
load(resolve_target)
|
|
BUILD_DIR = $$dirname(QMAKE_RESOLVED_TARGET)
|
|
}
|
|
|
|
contains(TEMPLATE, "vc.*"): \
|
|
manifest_file.output = $$BUILD_DIR/Package.appxmanifest
|
|
else: \
|
|
manifest_file.output = $$BUILD_DIR/AppxManifest.xml
|
|
|
|
# Provide the C-runtime dependency
|
|
equals(TEMPLATE, "app") {
|
|
VCLIBS = Microsoft.VCLibs.$$replace(MSVC_VER, \\., ).00
|
|
winphone: VCLIBS = $${VCLIBS}.Phone
|
|
CONFIG(debug, debug|release): \
|
|
VCLIBS = $${VCLIBS}.Debug
|
|
else: \
|
|
VCLIBS = $${VCLIBS}
|
|
contains(MSVC_VER, "14.0"): VCLIBS = "$${VCLIBS}\" MinVersion=\"14.0.0.0\" Publisher=\"CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US"
|
|
WINRT_MANIFEST.dependencies += $$VCLIBS
|
|
}
|
|
|
|
# Provide default values for required variables
|
|
isEmpty(WINRT_MANIFEST.target): WINRT_MANIFEST.target = $$TARGET
|
|
isEmpty(WINRT_MANIFEST.identity) {
|
|
# Reuse the existing UUID if possible
|
|
UUID_CACHE = $$OUT_PWD/.qmake.winrt_uuid_$$TARGET
|
|
exists($$UUID_CACHE) {
|
|
include($$UUID_CACHE)
|
|
} else {
|
|
WINRT_UUID = $$system(uuidgen)
|
|
isEmpty(WINRT_UUID): error("Unable to generate a UUID. Make sure uuidgen is in your PATH.")
|
|
WINRT_UUID = "WINRT_MANIFEST.identity = $$WINRT_UUID"
|
|
write_file($$UUID_CACHE, WINRT_UUID)|error("Unable to write the UUID cache; aborting.")
|
|
eval($$WINRT_UUID)
|
|
}
|
|
}
|
|
isEmpty(WINRT_MANIFEST.name): WINRT_MANIFEST.name = $$TARGET
|
|
isEmpty(WINRT_MANIFEST.architecture): WINRT_MANIFEST.architecture = $$VCPROJ_ARCH
|
|
isEmpty(WINRT_MANIFEST.version): WINRT_MANIFEST.version = 1.0.0.0
|
|
isEmpty(WINRT_MANIFEST.publisher): WINRT_MANIFEST.publisher = Default publisher display name
|
|
isEmpty(WINRT_MANIFEST.publisherid): WINRT_MANIFEST.publisherid = CN=$$(USERNAME)
|
|
isEmpty(WINRT_MANIFEST.phone_product_id): WINRT_MANIFEST.phone_product_id = $$WINRT_MANIFEST.identity
|
|
isEmpty(WINRT_MANIFEST.phone_publisher_id): WINRT_MANIFEST.phone_publisher_id = 00000000-0000-0000-0000-000000000000
|
|
isEmpty(WINRT_MANIFEST.description): WINRT_MANIFEST.description = Default package description
|
|
isEmpty(WINRT_MANIFEST.background): WINRT_MANIFEST.background = green
|
|
isEmpty(WINRT_MANIFEST.foreground): WINRT_MANIFEST.foreground = light
|
|
isEmpty(WINRT_MANIFEST.default_language): WINRT_MANIFEST.default_language = en
|
|
*-msvc2015 {
|
|
isEmpty(WINRT_MANIFEST.minVersion): WINRT_MANIFEST.minVersion = $$(UCRTVersion)
|
|
isEmpty(WINRT_MANIFEST.minVersion): error("No UCRTVersion found in environment."))
|
|
isEmpty(WINRT_MANIFEST.maxVersionTested): WINRT_MANIFEST.maxVersionTested = $$WINRT_MANIFEST.minVersion
|
|
}
|
|
|
|
INDENT = "$$escape_expand(\\r\\n) "
|
|
|
|
VS_XML_NAMESPACE = "m2"
|
|
winphone: VS_XML_NAMESPACE = "m3"
|
|
WINRT_MANIFEST.rotation_preference = $$unique(WINRT_MANIFEST.rotation_preference)
|
|
!isEmpty(WINRT_MANIFEST.rotation_preference) {
|
|
MANIFEST_ROTATION += "<$${VS_XML_NAMESPACE}:InitialRotationPreference>"
|
|
for(ROTATION, WINRT_MANIFEST.rotation_preference): \
|
|
MANIFEST_ROTATION += " <$${VS_XML_NAMESPACE}:Rotation Preference=\"$$ROTATION\" />"
|
|
MANIFEST_ROTATION += "</$${VS_XML_NAMESPACE}:InitialRotationPreference>"
|
|
|
|
WINRT_MANIFEST.rotation_preference = $$join(MANIFEST_ROTATION, $$INDENT, $$INDENT)
|
|
}
|
|
|
|
INDENT = "$$escape_expand(\\r\\n) "
|
|
|
|
# All Windows 10 applications need to have internetClient. It is also not marked as additional
|
|
# capability anymore and is assumed to be standard.
|
|
*-msvc2015: WINRT_MANIFEST.capabilities += internetClient
|
|
|
|
contains(WINRT_MANIFEST.capabilities, defaults) {
|
|
WINRT_MANIFEST.capabilities -= defaults
|
|
WINRT_MANIFEST.capabilities += $$WINRT_MANIFEST.capabilities_default
|
|
}
|
|
|
|
contains(WINRT_MANIFEST.capabilities_device, defaults) {
|
|
WINRT_MANIFEST.capabilities_device -= defaults
|
|
WINRT_MANIFEST.capabilities_device += $$WINRT_MANIFEST.capabilities_device_default
|
|
}
|
|
|
|
# Capabilities are given as a string list and may change with the configuration (network, sensors, etc.)
|
|
WINRT_MANIFEST.capabilities = $$unique(WINRT_MANIFEST.capabilities)
|
|
WINRT_MANIFEST.capabilities_device = $$unique(WINRT_MANIFEST.capabilities_device)
|
|
!isEmpty(WINRT_MANIFEST.capabilities)|!isEmpty(WINRT_MANIFEST.capabilities_device) {
|
|
MANIFEST_CAPABILITIES += "<Capabilities>"
|
|
for(CAPABILITY, WINRT_MANIFEST.capabilities): \
|
|
MANIFEST_CAPABILITIES += " <Capability Name=\"$$CAPABILITY\" />"
|
|
for(CAPABILITY, WINRT_MANIFEST.capabilities_device): \
|
|
MANIFEST_CAPABILITIES += " <DeviceCapability Name=\"$$CAPABILITY\" />"
|
|
MANIFEST_CAPABILITIES += "</Capabilities>"
|
|
|
|
WINRT_MANIFEST.capabilities = $$join(MANIFEST_CAPABILITIES, $$INDENT, $$INDENT)
|
|
}
|
|
|
|
# Dependencies are given as a string list. The CRT dependency is added automatically above.
|
|
# For MSVC2015 the dependencies are added in conjunction with TargetDeviceFamily
|
|
# Due to the hard coded dependency on "Windows.Universal" the <Dependencies> tag
|
|
# is already inside the MSVC2015 manifest.
|
|
WINRT_MANIFEST.dependencies = $$unique(WINRT_MANIFEST.dependencies)
|
|
!isEmpty(WINRT_MANIFEST.dependencies) {
|
|
*-msvc2013: MANIFEST_DEPENDENCIES += "<Dependencies>"
|
|
for(DEPENDENCY, WINRT_MANIFEST.dependencies): \
|
|
MANIFEST_DEPENDENCIES += " <PackageDependency Name=\"$$DEPENDENCY\" />"
|
|
*-msvc2013: MANIFEST_DEPENDENCIES += "</Dependencies>"
|
|
|
|
WINRT_MANIFEST.dependencies = $$join(MANIFEST_DEPENDENCIES, $$INDENT, $$INDENT)
|
|
}
|
|
|
|
# Provide default icons where needed
|
|
isEmpty(WINRT_ASSETS_PATH): WINRT_ASSETS_PATH = $$[QT_HOST_DATA/get]/mkspecs/common/winrt_winphone/assets
|
|
TEMPLATE_CONTENTS = $$cat($$WINRT_MANIFEST, lines)
|
|
ICONS_FOUND = $$find(TEMPLATE_CONTENTS, \\\$\\\$\\{WINRT_MANIFEST\\.(logo|tile)_)
|
|
ICONS_FOUND ~= s/.*\\\$\\\$\\{WINRT_MANIFEST\\.((logo|tile)_[^\}]+)\\}.*/\\1/g
|
|
for (ICON_NAME, ICONS_FOUND) {
|
|
ICON_FILE = $$eval(WINRT_MANIFEST.$$ICON_NAME)
|
|
isEmpty(ICON_FILE) {
|
|
equals(ICON_NAME, "logo_310x150"): ICON_FILE = $$eval(WINRT_MANIFEST.logo_wide)
|
|
else: equals(ICON_NAME, "logo_150x150"): ICON_FILE = $$eval(WINRT_MANIFEST.logo_large)
|
|
# Windows Phone specifics
|
|
else: equals(ICON_NAME, "logo_480x800"): ICON_FILE = $$eval(WINRT_MANIFEST.logo_splash)
|
|
else: equals(ICON_NAME, "logo_71x71"): ICON_FILE = $$eval(WINRT_MANIFEST.logo_medium)
|
|
else: equals(ICON_NAME, "logo_44x44"): ICON_FILE = $$eval(WINRT_MANIFEST.logo_small)
|
|
# Windows RT specifics
|
|
else: equals(ICON_NAME, "logo_620x300"): ICON_FILE = $$eval(WINRT_MANIFEST.logo_splash)
|
|
else: equals(ICON_NAME, "logo_70x70"): ICON_FILE = $$eval(WINRT_MANIFEST.logo_medium)
|
|
else: equals(ICON_NAME, "logo_30x30"): ICON_FILE = $$eval(WINRT_MANIFEST.logo_small)
|
|
}
|
|
isEmpty(ICON_FILE): ICON_FILE = $$WINRT_ASSETS_PATH/$${ICON_NAME}.png
|
|
icon_$${ICON_NAME}.input = $$ICON_FILE
|
|
icon_$${ICON_NAME}.output = $$BUILD_DIR/assets/$$basename(ICON_FILE)
|
|
icon_$${ICON_NAME}.CONFIG = verbatim
|
|
QMAKE_SUBSTITUTES += icon_$${ICON_NAME}
|
|
WINRT_MANIFEST.$${ICON_NAME} = assets/$$basename(ICON_FILE)
|
|
}
|
|
|
|
!contains(TEMPLATE, "vc.*") {
|
|
winrt_manifest_install.files = $$manifest_file.output
|
|
winrt_manifest_install.path = $$target.path
|
|
winrt_assets_install.files = $$BUILD_DIR/assets/*
|
|
winrt_assets_install.path = $$target.path/assets
|
|
INSTALLS += winrt_manifest_install winrt_assets_install
|
|
}
|
|
|
|
QMAKE_SUBSTITUTES += manifest_file
|
|
}
|