aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.qmake.conf5
-rw-r--r--README.md60
-rw-r--r--qmake-features/app.prf10
-rw-r--r--qmake-features/package.prf32
-rw-r--r--qmake-features/qmlplugin.prf23
-rw-r--r--qt-auto-extra-apps.pro6
6 files changed, 136 insertions, 0 deletions
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 \