diff options
author | Dominik Holland <dominik.holland@pelagicore.com> | 2018-12-04 16:05:12 +0100 |
---|---|---|
committer | Robert Griebl <robert.griebl@pelagicore.com> | 2018-12-05 13:14:57 +0000 |
commit | dff3e21c207d6bd8ef8c5934f42723794e6efb2a (patch) | |
tree | 6d4df9fb6d3deacf444c735451689ce07ca58fdd /qmake-features | |
parent | 60e84b364589f794d34078ea08ba337b77a10ade (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.prf | 46 | ||||
-rw-r--r-- | qmake-features/am-package.prf | 14 | ||||
-rw-r--r-- | qmake-features/qmake-features.pro | 17 |
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 +} |