From 7ada3952860398bdeef580e2260901a5f33b689e Mon Sep 17 00:00:00 2001 From: Dominik Holland Date: Fri, 31 Aug 2018 16:12:31 +0200 Subject: Introduce a build system for the repository This enables us to build the needed files and create a package out of it. Change-Id: Ic0ee97401785e1e61d3b4b71bd4d63a54c1efb98 Reviewed-by: Bramastyo Harimukti Santoso --- .qmake.conf | 5 ++++ README.md | 60 ++++++++++++++++++++++++++++++++++++++++++++ qmake-features/app.prf | 10 ++++++++ qmake-features/package.prf | 32 +++++++++++++++++++++++ qmake-features/qmlplugin.prf | 23 +++++++++++++++++ qt-auto-extra-apps.pro | 6 +++++ 6 files changed, 136 insertions(+) create mode 100644 .qmake.conf create mode 100644 qmake-features/app.prf create mode 100644 qmake-features/package.prf create mode 100644 qmake-features/qmlplugin.prf create mode 100644 qt-auto-extra-apps.pro diff --git a/.qmake.conf b/.qmake.conf new file mode 100644 index 0000000..9c2a768 --- /dev/null +++ b/.qmake.conf @@ -0,0 +1,5 @@ +SOURCE_DIR=$$PWD +BUILD_DIR=$$shadowed($$PWD) +QMAKEFEATURES=$$SOURCE_DIR/qmake-features + +CONFIG += package diff --git a/README.md b/README.md index ba8a6d8..079e5e6 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,63 @@ This repository hosts additional apps provided for installation in the Qt Automotive Suite. All apps are intended to be packaged by the appman-packager which is part of the QtApplicationManager module. + +# Building and Packaging of Apps + +All apps can be build by using the following commands: + +$ qmake +$ make + +In addition the apps can be packaged as well using the "package" build target + +$ make package + +# Adding new apps +## Simple Apps + +For simple QML only apps, just add a new folder with your QML files and icon and the info.yaml for the package. +The new package needs to be added to the qmake build system. For simple apps this is done by creating a new pro file named the same way like your folder. +The pro file looks as following: + +FILES += info.yaml \ + icon.png \ + Browser.qml + +load(app) + +Also make sure the new folder is added to the toplevel pro file qt-auto-extra-apps.pro + +## Complex Apps + +For more complex apps where you need to deploy a C++ based QML plugin in addition to your QML content you need to do the following: + +1. Create a new folder as described for Simple Apps +2. Create a new "app" sub-folder and a new "plugin" subfolder +3. In the plugin subfolder you can use the qmlplugin feature file e.g. + +TEMPLATE = lib +TARGET = camera +QT += qml quick +CONFIG += plugin + +TARGET = $$qtLibraryTarget($$TARGET) +uri = camera +load(qmlplugin) + +# Input +SOURCES += \ + camera_plugin.cpp \ + camerastream.cpp + +HEADERS += \ + camera_plugin.h \ + camerastream.h + +OTHER_FILES = qmldir + +4. In the app directory you can use the same template as used in the simple app case. +5. As the package name is retrieved from the folder name, you need to manually set the package name in your app project file +e.g. NAME = com.pelagicore.camera +6. Create a sub-dirs pro file in your global app folder +7. Add your app folder to the toplevel pro file qt-auto-extra-apps.pro diff --git a/qmake-features/app.prf b/qmake-features/app.prf new file mode 100644 index 0000000..0329256 --- /dev/null +++ b/qmake-features/app.prf @@ -0,0 +1,10 @@ +TEMPLATE = aux + +APPMAN_APP = TRUE + +app.files = $$FILES +app.path = $$OUT_PWD/../install/ + +isEmpty(NAME): NAME = $$basename(_PRO_FILE_PWD_) + +INSTALLS += app diff --git a/qmake-features/package.prf b/qmake-features/package.prf new file mode 100644 index 0000000..23d9d3a --- /dev/null +++ b/qmake-features/package.prf @@ -0,0 +1,32 @@ +# generate code coverage information using gcov/lcov/genhtml +message("PACKAGE") +CONFIG(debug,debug|release) { + equals(TEMPLATE, "subdirs") { + package.target = package + package.CONFIG = recursive + QMAKE_EXTRA_TARGETS += package + } equals(APPMAN_APP, "TRUE") { + + !isEmpty(EXTRA_METADATA): OPTIONS += --extra-metadata $$EXTRA_METADATA + !isEmpty(EXTRA_METADATA_FILE): OPTIONS += --extra-metadata-file $$EXTRA_METADATA_FILE + !isEmpty(EXTRA_SIGNED_METADATA): OPTIONS += --extra-signed-metadata $$EXTRA_SIGNED_METADATA + !isEmpty(EXTRA_SIGNED_METADATA_FILE): OPTIONS += --extra-signed-metadata-file $$EXTRA_SIGNED_METADATA_FILE + + # The actual packaging step + package.CONFIG += recursive + package.commands += @echo && echo "PACKAGING $$NAME" && echo && + package.commands += $$[QT_HOST_BINS]/appman-packager create-package $${OPTIONS} $${BUILD_DIR}/$${NAME}.pkg $$OUT_PWD/../install + build_pass|!debug_and_release:package.depends = install + + QMAKE_EXTRA_TARGETS *= package + + QMAKE_CLEAN += $${BUILD_DIR}/$${NAME}.pkg + } else { + # Create a dummy target for all other project files + package.CONFIG += recursive + build_pass|!debug_and_release:package.depends = install + + QMAKE_EXTRA_TARGETS *= package + } +} + diff --git a/qmake-features/qmlplugin.prf b/qmake-features/qmlplugin.prf new file mode 100644 index 0000000..59b3895 --- /dev/null +++ b/qmake-features/qmlplugin.prf @@ -0,0 +1,23 @@ +# Add a long padded rpath, so the installer can replace it with a relative rpath +QMAKE_RPATHDIR += "$$INSTALL_PREFIX/long_padding/long_padding/long_padding/long_padding/long_padding\ + long_padding/long_padding/long_padding/long_padding/long_padding/long_padding/" + +CONFIG += skip_target_version_ext +TARGET = $$qtLibraryTarget($$TARGET) +DESTDIR = $$OUT_PWD/imports/$$replace(uri, \\., /) + +OTHER_FILES = qmldir + +!equals(_PRO_FILE_PWD_, $$OUT_PWD) { + copy_qmldir.target = $$replace(DESTDIR, /, $$QMAKE_DIR_SEP)$${QMAKE_DIR_SEP}qmldir + copy_qmldir.depends = $$replace(_PRO_FILE_PWD_, /, $$QMAKE_DIR_SEP)$${QMAKE_DIR_SEP}qmldir + copy_qmldir.commands = $(COPY_FILE) \"$$copy_qmldir.depends\" \"$$copy_qmldir.target\" + QMAKE_EXTRA_TARGETS += copy_qmldir + PRE_TARGETDEPS += $$copy_qmldir.target +} + +qmldir.files = qmldir +installPath = $$OUT_PWD/../install/imports/$$replace(uri, \\., /) +qmldir.path = $$installPath +target.path = $$installPath +INSTALLS += target qmldir diff --git a/qt-auto-extra-apps.pro b/qt-auto-extra-apps.pro new file mode 100644 index 0000000..288d59e --- /dev/null +++ b/qt-auto-extra-apps.pro @@ -0,0 +1,6 @@ +TEMPLATE = subdirs +SUBDIRS = com.pelagicore.camera + +OTHER_FILES += qmake-features/qmlplugin.prf \ + qmake-features/app.prf \ + qmake-features/package.prf \ -- cgit v1.2.3