meta-app-framework: Update app template scheme
[AGL/meta-agl.git] / meta-app-framework / classes / agl-app.bbclass
diff --git a/meta-app-framework/classes/agl-app.bbclass b/meta-app-framework/classes/agl-app.bbclass
new file mode 100644 (file)
index 0000000..6565fdf
--- /dev/null
@@ -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}"