summaryrefslogtreecommitdiffstats
path: root/meta-app-framework/classes/agl-app.bbclass
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2022-07-27 16:50:30 -0400
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>2022-07-29 23:02:27 +0000
commit321af7331c91a174b52eb5e17d8ab5b3e72ce5cb (patch)
treeb01092f42658a5a8f2dfaa26696b9c3e44386228 /meta-app-framework/classes/agl-app.bbclass
parentb98ee1af003b2c98ba29836269a1ae1d9ebf56ba (diff)
meta-app-framework: Update app template scheme
Changes to support the move to systemd unit based app enumeration in applaunchd: - Bump applaunchd SRCREV to pick up enumeration changes. - Tweak the polkit rule to match agl-app* instead of agl-app@* to allow more flexibility with respect to different app templates. - Tweak the Description field definition in the agl-app service template to just use the instance name, as that field is now used for the application display name by applaunchd. - Add a agl-app-web service template for web apps. - Add a agl-app.bbclass for use in application recipes to simplify installation of the now required systemd template instances and potential generation of override files to tweak application configuration. - Split the agl-app and agl-app-web templates into their own packages in the applaunchd recipe so they can be depended on by applications as required. - Move applaunchd installed systemd units and override files to /lib/systemd/system since that matches the upstream recommendation for units installed as part of the system installation. Bug-AGL: SPEC-4466 Signed-off-by: Scott Murray <scott.murray@konsulko.com> Change-Id: I32ff6c9624850662856b79a2b14b33a05e7f9a65 Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/27835 Tested-by: Jenkins Job builder account ci-image-build: Jenkins Job builder account ci-image-boot-test: Jenkins Job builder account Reviewed-by: Jose Dapena Paz <jdapena@igalia.com> Reviewed-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
Diffstat (limited to 'meta-app-framework/classes/agl-app.bbclass')
-rw-r--r--meta-app-framework/classes/agl-app.bbclass75
1 files changed, 75 insertions, 0 deletions
diff --git a/meta-app-framework/classes/agl-app.bbclass b/meta-app-framework/classes/agl-app.bbclass
new file mode 100644
index 000000000..6565fdfae
--- /dev/null
+++ b/meta-app-framework/classes/agl-app.bbclass
@@ -0,0 +1,75 @@
+#
+# AGL application systemd unit installation class
+#
+
+# Systemd template unit
+# * agl-app, agl-app-web, agl-app-flutter valid
+AGL_APP_TEMPLATE ?= "agl-app"
+
+# Application ID
+# This is what the application will be referred to in the list
+# exposed to clients by applaunchd, and generally ends up as the
+# identifier used by agl-compositor for application surface
+# activation.
+AGL_APP_ID ?= "${BPN}"
+
+# Application display name
+AGL_APP_NAME ?= "${AGL_APP_ID}"
+
+# Application executable
+# * agl-app template only
+# Use if the application ID and the executable name are both
+# different from the package name and each other as well.
+AGL_APP_EXEC ?= "${AGL_APP_ID}"
+
+# Web application bundle directory (non-absolute, so directory
+# name under /usr/lib/wam_apps)
+# * agl-app-web template only
+# Use if the web application bundle installs to a directory that
+# is not the same as the package name.
+AGL_APP_WAM_DIR ?= "${BPN}"
+
+do_install:append () {
+ install -d ${D}${systemd_system_unitdir}
+ ln -s ${AGL_APP_TEMPLATE}\@.service \
+ ${D}${systemd_system_unitdir}/${AGL_APP_TEMPLATE}\@${AGL_APP_ID}.service
+
+ # NOTE: Unit & Service changes could potentially be collected
+ # and a single override .conf created, but things will be
+ # kept simple for now.
+
+ if [ "${AGL_APP_EXEC}" != "${AGL_APP_ID}" ]; then
+ install -d ${D}${systemd_system_unitdir}/${AGL_APP_TEMPLATE}\@${AGL_APP_ID}.service.d
+ cat <<-EOF > ${D}${systemd_system_unitdir}/${AGL_APP_TEMPLATE}\@${AGL_APP_ID}.service.d/exec.conf
+ [Service]
+ ExecStart=
+ ExecStart=${AGL_APP_EXEC}
+ EOF
+ fi
+
+ if [ "${AGL_APP_NAME}" != "${AGL_APP_ID}" ]; then
+ install -d ${D}${systemd_system_unitdir}/${AGL_APP_TEMPLATE}\@${AGL_APP_ID}.service.d
+ cat <<-EOF > ${D}${systemd_system_unitdir}/${AGL_APP_TEMPLATE}\@${AGL_APP_ID}.service.d/name.conf
+ [Unit]
+ Description=
+ Description=${AGL_APP_NAME}
+ EOF
+ fi
+
+ if [ "${AGL_APP_TEMPLATE}" = "agl-app-web" -a "${AGL_APP_ID}" != "${BPN}" ]; then
+ # The application ID does not necessarily match the package name
+ # used in the WAM install hierarchy, and the IDs are hard-coded in
+ # some of the web apps, so if necessary create an override for the
+ # environment variable used in place of directly deriving from %i
+ # (which will always be the app id).
+ install -d ${D}${systemd_system_unitdir}/${AGL_APP_TEMPLATE}\@${AGL_APP_ID}.service.d
+ cat <<-EOF > ${D}${systemd_system_unitdir}/${AGL_APP_TEMPLATE}\@${AGL_APP_ID}.service.d/wam.conf
+ [Service]
+ Environment=AGL_APP_WAM_DIR=${AGL_APP_WAM_DIR}
+ EOF
+ fi
+}
+
+FILES:${PN}:append = " ${systemd_system_unitdir} ${datadir}/icons"
+
+RDEPENDS:${PN}:append = " applaunchd-template-${AGL_APP_TEMPLATE}"