diff --git a/mkspecs/common/winrt_winphone/assets/logo_large.png b/mkspecs/common/winrt_winphone/assets/logo_large.png
new file mode 100644
index 0000000000..069171ca4d
Binary files /dev/null and b/mkspecs/common/winrt_winphone/assets/logo_large.png differ
diff --git a/mkspecs/common/winrt_winphone/assets/logo_medium.png b/mkspecs/common/winrt_winphone/assets/logo_medium.png
new file mode 100644
index 0000000000..fa0d9fb64a
Binary files /dev/null and b/mkspecs/common/winrt_winphone/assets/logo_medium.png differ
diff --git a/mkspecs/common/winrt_winphone/assets/logo_small.png b/mkspecs/common/winrt_winphone/assets/logo_small.png
new file mode 100644
index 0000000000..2acac59e73
Binary files /dev/null and b/mkspecs/common/winrt_winphone/assets/logo_small.png differ
diff --git a/mkspecs/common/winrt_winphone/assets/logo_splash.png b/mkspecs/common/winrt_winphone/assets/logo_splash.png
new file mode 100644
index 0000000000..a2be79f5d7
Binary files /dev/null and b/mkspecs/common/winrt_winphone/assets/logo_splash.png differ
diff --git a/mkspecs/common/winrt_winphone/assets/logo_store.png b/mkspecs/common/winrt_winphone/assets/logo_store.png
new file mode 100644
index 0000000000..417ccdcb5f
Binary files /dev/null and b/mkspecs/common/winrt_winphone/assets/logo_store.png differ
diff --git a/mkspecs/common/winrt_winphone/assets/tile_iconic_medium.png b/mkspecs/common/winrt_winphone/assets/tile_iconic_medium.png
new file mode 100644
index 0000000000..e42f8255db
Binary files /dev/null and b/mkspecs/common/winrt_winphone/assets/tile_iconic_medium.png differ
diff --git a/mkspecs/common/winrt_winphone/assets/tile_iconic_small.png b/mkspecs/common/winrt_winphone/assets/tile_iconic_small.png
new file mode 100644
index 0000000000..c7b7ee7893
Binary files /dev/null and b/mkspecs/common/winrt_winphone/assets/tile_iconic_small.png differ
diff --git a/mkspecs/common/winrt_winphone/manifests/8.0/AppxManifest.xml.in b/mkspecs/common/winrt_winphone/manifests/8.0/AppxManifest.xml.in
new file mode 100644
index 0000000000..6a0ca444c3
--- /dev/null
+++ b/mkspecs/common/winrt_winphone/manifests/8.0/AppxManifest.xml.in
@@ -0,0 +1,39 @@
+
+
+
+
+ $${WINRT_MANIFEST.name}
+ $${WINRT_MANIFEST.publisher}
+ $${WINRT_MANIFEST.logo_store}
+
+
+ 6.2.0
+ 6.3.0
+
+
+
+
+
+
+
+
+
+
+
+ $${WINRT_MANIFEST.capabilities}
+ $${WINRT_MANIFEST.dependencies}
+
+
diff --git a/mkspecs/common/winrt_winphone/manifests/8.0/WMAppManifest.xml.in b/mkspecs/common/winrt_winphone/manifests/8.0/WMAppManifest.xml.in
new file mode 100644
index 0000000000..e1d3d071e9
--- /dev/null
+++ b/mkspecs/common/winrt_winphone/manifests/8.0/WMAppManifest.xml.in
@@ -0,0 +1,39 @@
+
+
+
+
+ $${WINRT_MANIFEST.logo_medium}
+ $${WINRT_MANIFEST.capabilities}
+
+
+
+
+
+
+ $${WINRT_MANIFEST.tile_iconic_small}
+ $${WINRT_MANIFEST.tile_iconic_medium}
+ $${WINRT_MANIFEST.name}
+ $${WINRT_MANIFEST.background}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mkspecs/common/winrt_winphone/manifests/8.1/AppxManifest.xml.in b/mkspecs/common/winrt_winphone/manifests/8.1/AppxManifest.xml.in
new file mode 100644
index 0000000000..8c214871e3
--- /dev/null
+++ b/mkspecs/common/winrt_winphone/manifests/8.1/AppxManifest.xml.in
@@ -0,0 +1,44 @@
+
+
+
+
+ $${WINRT_MANIFEST.name}
+ $${WINRT_MANIFEST.publisher}
+ $${WINRT_MANIFEST.logo_store}
+
+
+ 6.3.0
+ 6.3.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $${WINRT_MANIFEST.capabilities}
+ $${WINRT_MANIFEST.dependencies}
+
+
diff --git a/mkspecs/common/winrt_winphone/qmake.conf b/mkspecs/common/winrt_winphone/qmake.conf
index c990122ac6..d7296afe95 100644
--- a/mkspecs/common/winrt_winphone/qmake.conf
+++ b/mkspecs/common/winrt_winphone/qmake.conf
@@ -7,7 +7,7 @@
MAKEFILE_GENERATOR = MSBUILD
QMAKE_COMPILER = msvc
QMAKE_PLATFORM = winrt win32
-CONFIG += incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target no_generated_target_info autogen_wmappmanifest rtti
+CONFIG += incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target no_generated_target_info package_manifest rtti
DEFINES += UNICODE WIN32 QT_LARGEFILE_SUPPORT Q_BYTE_ORDER=Q_LITTLE_ENDIAN \
QT_NO_PRINTER QT_NO_PRINTDIALOG # TODO: Remove when printing is re-enabled
@@ -90,4 +90,5 @@ include(../shell-win32.conf)
VCPROJ_EXTENSION = .vcxproj
VCSOLUTION_EXTENSION = .sln
VCPROJ_KEYWORD = Qt4VSv1.0
+WINRT_ASSETS_PATH = $$PWD/assets
load(qt_config)
diff --git a/mkspecs/features/winrt/package_manifest.prf b/mkspecs/features/winrt/package_manifest.prf
new file mode 100644
index 0000000000..969a6780ce
--- /dev/null
+++ b/mkspecs/features/winrt/package_manifest.prf
@@ -0,0 +1,121 @@
+# 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.arguments: Allows arguments to be passed to the executable.
+# WINRT_MANIFEST.publisher: Display name of the publisher. Defaults to "Default publisher display name".
+# WINRT_MANIFEST.publisher_id: On Windows 8/RT, the publisher's distinguished name (default: CN=MyCN). On Windows Phone, the publisher's UUID (default: invalid UUID string).
+# WINRT_MANIFEST.description: Package description. Defaults to "Default package description".
+# WINRT_MANIFEST.author: Package author (Windows Phone only). Defaults to "Default package author".
+# WINRT_MANIFEST.genre: Package genre (Windows Phone only). Defaults to "apps.normal".
+# 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.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.capabilities: Specifies capabilities to add to the capability list.
+# WINRT_MANIFEST.dependencies: Specifies dependencies required by the package.
+
+# 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
+
+ load(resolve_target)
+ BUILD_DIR = $$dirname(QMAKE_RESOLVED_TARGET)
+ winphone: \
+ manifest_file.output = $$BUILD_DIR/WMAppManifest.xml
+ else: 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
+ CONFIG(debug, debug|release): \
+ WINRT_MANIFEST.dependencies += $${VCLIBS}.Debug
+ else: \
+ 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 = "WINRT_MANIFEST.identity = $$system(uuidgen)"
+ write_file($$UUID_CACHE, WINRT_UUID)|error("Unable to write the UUID cache; aborting.")
+ eval($$WINRT_UUID)
+ }
+ winphone: WINRT_MANIFEST.identity = {$$WINRT_MANIFEST.identity}
+ }
+ 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) {
+ winphone: WINRT_MANIFEST.publisherid = {00000000-0000-0000-0000-000000000000}
+ else: WINRT_MANIFEST.publisherid = CN=$$(USERNAME)
+ }
+ isEmpty(WINRT_MANIFEST.description): WINRT_MANIFEST.description = Default package description
+ isEmpty(WINRT_MANIFEST.author): WINRT_MANIFEST.author = Default package author
+ isEmpty(WINRT_MANIFEST.genre): WINRT_MANIFEST.genre = apps.normal
+ isEmpty(WINRT_MANIFEST.background): WINRT_MANIFEST.background = green
+ isEmpty(WINRT_MANIFEST.foreground): WINRT_MANIFEST.foreground = light
+
+ winphone: INDENT = "$$escape_expand(\\r\\n) "
+ else: INDENT = "$$escape_expand(\\r\\n) "
+ # Capabilities are given as a string list and may change with the configuration (network, sensors, etc.)
+ WINRT_MANIFEST.capabilities = $$unique(WINRT_MANIFEST.capabilities)
+ for(CAPABILITY, WINRT_MANIFEST.capabilities): \
+ MANIFEST_CAPABILITIES += " "
+ WINRT_MANIFEST.capabilities = $$join(MANIFEST_CAPABILITIES, $$INDENT, $$INDENT, $$INDENT)
+ # Dependencies are given as a string list. The CRT dependency is added automatically above.
+ WINRT_MANIFEST.dependencies = $$unique(WINRT_MANIFEST.dependencies)
+ for(DEPENDENCY, WINRT_MANIFEST.dependencies): \
+ MANIFEST_DEPENDENCIES += " "
+ WINRT_MANIFEST.dependencies = $$join(MANIFEST_DEPENDENCIES, $$INDENT, $$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) {
+ icon_$${ICON_NAME}.input = $$WINRT_ASSETS_PATH/$${ICON_NAME}.png
+ icon_$${ICON_NAME}.output = $$BUILD_DIR/assets/$${ICON_NAME}.png
+ WINRT_MANIFEST.$${ICON_NAME} = assets/$${ICON_NAME}.png
+ } else {
+ icon_$${ICON_NAME}.input = $$ICON_FILE
+ icon_$${ICON_NAME}.output = $$BUILD_DIR/$$ICON_FILE
+ }
+ icon_$${ICON_NAME}.CONFIG = verbatim
+ QMAKE_SUBSTITUTES += icon_$${ICON_NAME}
+ }
+
+ QMAKE_SUBSTITUTES += manifest_file
+}
diff --git a/mkspecs/winphone-arm-msvc2012/qmake.conf b/mkspecs/winphone-arm-msvc2012/qmake.conf
index d5d26d2a96..c4e3d2bab7 100644
--- a/mkspecs/winphone-arm-msvc2012/qmake.conf
+++ b/mkspecs/winphone-arm-msvc2012/qmake.conf
@@ -17,3 +17,4 @@ VCPROJ_ARCH = ARM
MSVC_VER = 11.0
WINSDK_VER = 8.0
WINTARGET_VER = WP80
+WINRT_MANIFEST = $$PWD/../common/winrt_winphone/manifests/8.0/WMAppManifest.xml.in
diff --git a/mkspecs/winphone-x86-msvc2012/qmake.conf b/mkspecs/winphone-x86-msvc2012/qmake.conf
index 59e6fb45db..1329370900 100644
--- a/mkspecs/winphone-x86-msvc2012/qmake.conf
+++ b/mkspecs/winphone-x86-msvc2012/qmake.conf
@@ -17,3 +17,4 @@ VCPROJ_ARCH = x86
MSVC_VER = 11.0
WINSDK_VER = 8.0
WINTARGET_VER = WP80
+WINRT_MANIFEST = $$PWD/../common/winrt_winphone/manifests/8.0/WMAppManifest.xml.in
diff --git a/mkspecs/winrt-arm-msvc2012/qmake.conf b/mkspecs/winrt-arm-msvc2012/qmake.conf
index 951dc2db35..41594a3547 100644
--- a/mkspecs/winrt-arm-msvc2012/qmake.conf
+++ b/mkspecs/winrt-arm-msvc2012/qmake.conf
@@ -16,3 +16,4 @@ VCPROJ_ARCH = ARM
MSVC_VER = 11.0
WINSDK_VER = 8.0
WINTARGET_VER = win8
+WINRT_MANIFEST = $$PWD/../common/winrt_winphone/manifests/8.0/AppxManifest.xml.in
diff --git a/mkspecs/winrt-arm-msvc2013/qmake.conf b/mkspecs/winrt-arm-msvc2013/qmake.conf
index 5527a7a41c..83ab228d7f 100644
--- a/mkspecs/winrt-arm-msvc2013/qmake.conf
+++ b/mkspecs/winrt-arm-msvc2013/qmake.conf
@@ -18,3 +18,4 @@ VCPROJ_ARCH = ARM
MSVC_VER = 12.0
WINSDK_VER = 8.1
WINTARGET_VER = winv6.3
+WINRT_MANIFEST = $$PWD/../common/winrt_winphone/manifests/8.1/AppxManifest.xml.in
diff --git a/mkspecs/winrt-x64-msvc2012/qmake.conf b/mkspecs/winrt-x64-msvc2012/qmake.conf
index 96806499bc..f6e360ae12 100644
--- a/mkspecs/winrt-x64-msvc2012/qmake.conf
+++ b/mkspecs/winrt-x64-msvc2012/qmake.conf
@@ -16,3 +16,4 @@ VCPROJ_ARCH = x64
MSVC_VER = 11.0
WINSDK_VER = 8.0
WINTARGET_VER = win8
+WINRT_MANIFEST = $$PWD/../common/winrt_winphone/manifests/8.0/AppxManifest.xml.in
diff --git a/mkspecs/winrt-x64-msvc2013/qmake.conf b/mkspecs/winrt-x64-msvc2013/qmake.conf
index e7d2432cc4..2c01450ed4 100644
--- a/mkspecs/winrt-x64-msvc2013/qmake.conf
+++ b/mkspecs/winrt-x64-msvc2013/qmake.conf
@@ -18,3 +18,4 @@ VCPROJ_ARCH = x64
MSVC_VER = 12.0
WINSDK_VER = 8.1
WINTARGET_VER = winv6.3
+WINRT_MANIFEST = $$PWD/../common/winrt_winphone/manifests/8.1/AppxManifest.xml.in
diff --git a/mkspecs/winrt-x86-msvc2012/qmake.conf b/mkspecs/winrt-x86-msvc2012/qmake.conf
index 9186ff2eb1..664212624c 100644
--- a/mkspecs/winrt-x86-msvc2012/qmake.conf
+++ b/mkspecs/winrt-x86-msvc2012/qmake.conf
@@ -16,3 +16,4 @@ VCPROJ_ARCH = x86
MSVC_VER = 11.0
WINSDK_VER = 8.0
WINTARGET_VER = win8
+WINRT_MANIFEST = $$PWD/../common/winrt_winphone/manifests/8.0/AppxManifest.xml.in
diff --git a/mkspecs/winrt-x86-msvc2013/qmake.conf b/mkspecs/winrt-x86-msvc2013/qmake.conf
index 77083e9cbc..384b51a1e6 100644
--- a/mkspecs/winrt-x86-msvc2013/qmake.conf
+++ b/mkspecs/winrt-x86-msvc2013/qmake.conf
@@ -18,3 +18,4 @@ VCPROJ_ARCH = x86
MSVC_VER = 12.0
WINSDK_VER = 8.1
WINTARGET_VER = winv6.3
+WINRT_MANIFEST = $$PWD/../common/winrt_winphone/manifests/8.1/AppxManifest.xml.in