summaryrefslogtreecommitdiffstats
path: root/qmake-features
diff options
context:
space:
mode:
authorDominik Holland <dominik.holland@pelagicore.com>2018-12-04 16:05:12 +0100
committerRobert Griebl <robert.griebl@pelagicore.com>2018-12-05 13:14:57 +0000
commitdff3e21c207d6bd8ef8c5934f42723794e6efb2a (patch)
tree6d4df9fb6d3deacf444c735451689ce07ca58fdd /qmake-features
parent60e84b364589f794d34078ea08ba337b77a10ade (diff)
Add a qmake integration to package applications using appman-packager
Task-number: AUTOSUITE-691 Change-Id: I697ef05c3a705dd9bffdbba06258ca2a84e67374 Reviewed-by: Robert Griebl <robert.griebl@pelagicore.com>
Diffstat (limited to 'qmake-features')
-rw-r--r--qmake-features/am-app.prf46
-rw-r--r--qmake-features/am-package.prf14
-rw-r--r--qmake-features/qmake-features.pro17
3 files changed, 76 insertions, 1 deletions
diff --git a/qmake-features/am-app.prf b/qmake-features/am-app.prf
new file mode 100644
index 00000000..fe2f590a
--- /dev/null
+++ b/qmake-features/am-app.prf
@@ -0,0 +1,46 @@
+isEmpty(AM_PACKAGE_DIR): error("AM_PACKAGE_DIR not set, don't know what to package")
+
+isEmpty(AM_MANIFEST): AM_MANIFEST = info.yaml
+AM_MANIFEST_PATH = $$absolute_path($$AM_MANIFEST, $$_PRO_FILE_PWD_)
+!exists($$AM_MANIFEST_PATH): error("Couldn't find a valid info.yaml. Please make sure it exists in the project folder or set AM_MANIFEST to the correct location")
+
+!isEmpty(AM_PACKAGE_EXTRA_METADATA): OPTIONS += --extra-metadata $$EXTRA_METADATA
+!isEmpty(AM_PACKAGE_EXTRA_METADATA_FILE): OPTIONS += --extra-metadata-file $$system_quote($$EXTRA_METADATA_FILE)
+!isEmpty(AM_PACKAGE_EXTRA_SIGNED_METADATA): OPTIONS += --extra-signed-metadata $$EXTRA_SIGNED_METADATA
+!isEmpty(AM_PACKAGE_EXTRA_SIGNED_METADATA_FILE): OPTIONS += --extra-signed-metadata-file $$system_quote($$EXTRA_SIGNED_METADATA_FILE)
+
+# Call the appman-packager to convert the yaml to JSON to parse it here
+qtPrepareTool(APPMAN_PACKAGER, appman-packager, , system)
+
+JSON = $$system($$APPMAN_PACKAGER yaml-to-json -i1 $$system_quote($$AM_MANIFEST_PATH))
+parseJson(JSON, INFO)| error("Failed to parse appman-packager output.")
+
+AM_PACKAGE_NAME = $${INFO.id}
+contains(INFO._KEYS_, version): {
+ AM_PACKAGE_NAME = $${AM_PACKAGE_NAME}-$${INFO.version}
+}
+
+equals(QMAKE_HOST.os, Windows):ECHO_NL=echo.
+else:ECHO_NL=echo
+
+# The prepackaging step
+# Calls make install with a special INSTALL_ROOT to collect all files (including sub projects)
+prepackage.commands += @$$ECHO_NL && echo "Fetching files for package $${AM_PACKAGE_NAME}" && $$ECHO_NL &&
+equals(QMAKE_HOST.os, Windows): prepackage.commands += set INSTALL_ROOT=$$system_quote($$shell_path($$OUT_PWD/package-tmp/))&& $(MAKE) -f $(MAKEFILE) install
+else:prepackage.commands += INSTALL_ROOT=$$OUT_PWD/package-tmp/ $(MAKE) -f $(MAKEFILE) install
+prepackage.depends += qmake
+
+# The actual packaging step
+# Call the prepackage step and package everything which got installed
+package.commands += @$$ECHO_NL && echo "Packaging $${AM_PACKAGE_NAME}" &&
+package.commands += $$APPMAN_PACKAGER create-package $${OPTIONS} $$system_quote($$OUT_PWD/$${AM_PACKAGE_NAME}.pkg) $$system_quote($$OUT_PWD/package-tmp/$$AM_PACKAGE_DIR) &&
+package.commands += echo "The package is now ready at: $$OUT_PWD/$${AM_PACKAGE_NAME}.pkg" && $$ECHO_NL
+package.depends += prepackage
+
+# clean step
+package_clean.commands = $$QMAKE_DEL_TREE $$OUT_PWD/package-tmp/
+
+QMAKE_EXTRA_TARGETS *= package prepackage package_clean
+CLEAN_DEPS *= package_clean
+
+QMAKE_CLEAN += $$OUT_PWD/$${AM_PACKAGE_NAME}.pkg
diff --git a/qmake-features/am-package.prf b/qmake-features/am-package.prf
new file mode 100644
index 00000000..290432a7
--- /dev/null
+++ b/qmake-features/am-package.prf
@@ -0,0 +1,14 @@
+CONFIG(debug,debug|release) {
+ !contains(QMAKE_EXTRA_TARGETS, "package"): {
+ equals(TEMPLATE, "subdirs"): {
+ package.target = package
+ package.CONFIG = recursive
+ QMAKE_EXTRA_TARGETS += package
+ } else {
+ #add a dummy target to make the recursive package step work
+ package.target = package
+ QMAKE_EXTRA_TARGETS += package
+ }
+ }
+}
+
diff --git a/qmake-features/qmake-features.pro b/qmake-features/qmake-features.pro
index 25b23a56..b03e740d 100644
--- a/qmake-features/qmake-features.pro
+++ b/qmake-features/qmake-features.pro
@@ -5,7 +5,22 @@ OTHER_FILES += \
#All the feature files we want to install and provide to other modules or to the examples
features.files += \
- am-systemui.prf
+ am-systemui.prf \
+ am-app.prf \
+ am-package.prf
features.path = $$[QT_HOST_DATA]/mkspecs/features
INSTALLS += features
+
+# Ensure files are copied to qtbase mkspecs for non-prefixed builds
+!force_independent:if(!debug_and_release|!build_all|CONFIG(release, debug|release)) {
+ defineReplace(stripSrcDir) {
+ return($$relative_path($$1, $$_PRO_FILE_PWD_))
+ }
+ prffiles2build.input = features.files
+ prffiles2build.output = $$[QT_HOST_DATA]/mkspecs/features/${QMAKE_FUNC_FILE_IN_stripSrcDir}
+ prffiles2build.commands = $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
+ prffiles2build.name = COPY ${QMAKE_FILE_IN}
+ prffiles2build.CONFIG = no_link target_predeps
+ QMAKE_EXTRA_COMPILERS += prffiles2build
+}