Widget packaging rework
[AGL/meta-agl.git] / meta-app-framework / classes / aglwgt.bbclass
index 7420bae..faa17e3 100644 (file)
@@ -8,7 +8,6 @@
 # The makefile needs to use wgtpkg-pack.
 #
 
-
 # 'wgtpkg-pack' in af-main-native is required.
 DEPENDS_append = " af-main-native"
 
@@ -21,57 +20,64 @@ DEPENDS_append = " cmake-apps-module-native"
 # for hal bindings genskel is required.
 DEPENDS_append = " af-binder-devtools-native"
 
-EXTRA_OECMAKE_append_agl-ptest = " -DBUILD_TEST_WGT=TRUE"
+# Set the default build type for cmake based projects
+# NOTE: This can be removed after switching to using the autobuild
+#       script to do compilation
+EXTRA_OECMAKE_append = " -DCMAKE_BUILD_TYPE=RELEASE"
 
 # FIXME: Remove once CMake+ninja issues are resolved
 OECMAKE_GENERATOR = "Unix Makefiles"
 
-do_aglwgt_package()  {
+AGLWGT_EXTRA_BUILD_ARGS = "VERBOSE=TRUE ${PARALLEL_MAKE}"
 
-    mkdir -p ${S}/build-test
-    mkdir -p ${S}/build-debug
-    mkdir -p ${S}/build-coverage
+# Only widgets with recipe names starting with agl-service- are
+# assumed to have tests by default, set this to "true" to force
+# building/packaging of the test widget for other widgets.
+AGLWGT_HAVE_TESTS = "false"
+
+# Warning on missing test/debug/coverage packages disabled by default
+# for now to reduce build output clutter.
+AGLWGT_PACKAGE_WARN = "false"
 
+# There are some widgets with build issues wrt test/debug/coverage
+# that are currently non-fatal but do not yield a widget, allow empty
+# test and coverage packages for now to allow the build to proceed.
+# This matches the default behavior for -dbg packages.
+#
+# NOTE: This should revisited after a round of autobuild script rework
+#       to address SPEC-3300.
+ALLOW_EMPTY_${PN}-coverage = "1"
+ALLOW_EMPTY_${PN}-test = "1"
+
+
+do_aglwgt_package()  {
     bldcmd=${S}/autobuild/agl/autobuild
     if [ ! -x "$bldcmd" ]; then
-        bldcmd=${S}/conf.d/autobuild/agl/autobuild
-        if [ -x "$bldcmd" ]; then
-            bbwarn "OBSOLETE: Your autobuild script should be located in :"
-            bbwarn "autobuild/agl/ from the project root source folder"
-            bbwarn "and generate a .wgt file using wgtpack in the build"
-            bbwarn "root folder calling:"
-            bbwarn "./autobuild/agl/autobuild package DEST=<BUILDDIR>"
-            bbwarn "See: https://wiki.automotivelinux.org/troubleshooting/app-recipes"
-        else
-            bbwarn "OBSOLETE: You must have an autobuild script located in:"
-            bbwarn "autobuild/agl/ from the project root source folder"
-            bbwarn "with filename autobuild which should generate"
-            bbwarn "a .wgt file using wgtpack in the build"
-            bbwarn "root folder calling:"
-            bbwarn "./autobuild/agl/autobuild package DEST=<BUILDDIR>"
-            bbwarn "Fix your package as it will not work within the SDK"
-            bbwarn "See: https://wiki.automotivelinux.org/troubleshooting/app-recipes"
-            bldcmd=make
-        fi
+        bbfatal "Missing autobuild/agl/autobuild script"
     fi
 
     cd ${B}
-    if ! $bldcmd package BUILD_DIR=${B} DEST=${S}/widgets VERBOSE=TRUE; then
+    if ! $bldcmd package BUILD_DIR=${B} DEST=${B}/build-release ${AGLWGT_EXTRA_BUILD_ARGS}; then
         bbwarn "Target: package failed"
     fi
 
-    cd ${S}/build-test
-    if ! $bldcmd package-test BUILD_DIR=${S}/build-test DEST=${S}/widgets VERBOSE=TRUE; then
-        bbwarn "Target: package-test failed"
+    if echo ${BPN} | grep -q '^agl-service-' || [ "${AGLWGT_HAVE_TESTS}" = "true" ]; then
+        mkdir -p ${S}/build-test
+        cd ${S}/build-test
+        if ! $bldcmd package-test BUILD_DIR=${S}/build-test DEST=${B}/build-test ${AGLWGT_EXTRA_BUILD_ARGS}; then
+            bbwarn "Target: package-test failed"
+        fi
     fi
 
+    mkdir -p ${S}/build-debug
     cd ${S}/build-debug
-    if ! $bldcmd package-debug BUILD_DIR=${S}/build-debug DEST=${S}/widgets VERBOSE=TRUE; then
+    if ! $bldcmd package-debug BUILD_DIR=${S}/build-debug DEST=${B}/build-debug ${AGLWGT_EXTRA_BUILD_ARGS}; then
         bbwarn "Target: package-debug failed"
     fi
 
+    mkdir -p ${S}/build-coverage
     cd ${S}/build-coverage
-    if ! $bldcmd package-coverage BUILD_DIR=${S}/build-coverage DEST=${S}/widgets VERBOSE=TRUE; then
+    if ! $bldcmd package-coverage BUILD_DIR=${S}/build-coverage DEST=${B}/build-coverage ${AGLWGT_EXTRA_BUILD_ARGS}; then
         bbwarn "Target: package-coverage failed"
     fi
 }
@@ -80,55 +86,48 @@ python () {
     d.setVarFlag('do_aglwgt_deploy', 'fakeroot', '1')
 }
 
-
 POST_INSTALL_LEVEL ?= "10"
 POST_INSTALL_SCRIPT ?= "${POST_INSTALL_LEVEL}-${PN}.sh"
 
 EXTRA_WGT_POSTINSTALL ?= ""
 
 do_aglwgt_deploy() {
-    TEST_WGT="*-test.wgt"
-    DEBUG_WGT="*-debug.wgt"
-    COVERAGE_WGT="*-coverage.wgt"
-    if [ "${AGLWGT_AUTOINSTALL_${PN}}" = "0" ]
-    then
-        install -d ${D}/usr/AGL/apps/manualinstall
-        install -m 0644 ${B}/*.wgt ${D}/usr/AGL/apps/manualinstall || \
-        install -m 0644 ${B}/package/*.wgt ${D}/usr/AGL/apps/manualinstall
-    else
-        install -d ${D}/usr/AGL/apps/autoinstall
-        install -m 0644 ${B}/*.wgt ${D}/usr/AGL/apps/autoinstall || \
-        install -m 0644 ${B}/package/*.wgt ${D}/usr/AGL/apps/autoinstall
-
-        install -m 0644 ${S}/widgets/*.wgt ${D}/usr/AGL/apps/autoinstall || \
-            ( bbwarn "no package found in widget directory")
-
-        if [ "$(find ${D}/usr/AGL/apps/autoinstall -name ${TEST_WGT})" ]
-        then
-                install -d ${D}/usr/AGL/apps/testwgt
-            mv ${D}/usr/AGL/apps/autoinstall/*-test.wgt ${D}/usr/AGL/apps/testwgt
-        fi
-
-        if [ "$(find ${D}/usr/AGL/apps/autoinstall -name ${DEBUG_WGT})" ]
-        then
-                install -d ${D}/usr/AGL/apps/debugwgt
-            mv ${D}/usr/AGL/apps/autoinstall/*-debug.wgt ${D}/usr/AGL/apps/debugwgt
-        fi
-
-        if [ "$(find ${D}/usr/AGL/apps/autoinstall -name ${COVERAGE_WGT})" ]
-        then
-                install -d ${D}/usr/AGL/apps/coveragewgt
-            mv ${D}/usr/AGL/apps/autoinstall/*-coverage.wgt ${D}/usr/AGL/apps/coveragewgt
-        fi
+    DEST=release
+    if [ "${AGLWGT_AUTOINSTALL_${PN}}" = "0" ]; then
+        DEST=manualinstall
+    fi
 
+    if [ "$(find ${B}/build-release -name '*.wgt')" ]; then
+        install -d ${D}/usr/AGL/apps/$DEST
+        install -m 0644 ${B}/build-release/*.wgt ${D}/usr/AGL/apps/$DEST/
+    else
+        bberror "no package found in widget directory"
     fi
 
-    APP_FILES=""
-    for file in ${D}/usr/AGL/apps/autoinstall/*.wgt;do
-        APP_FILES="${APP_FILES} $(basename $file)";
+    for t in test debug coverage; do
+        if [ "$(find ${B}/build-${t} -name *-${t}.wgt)" ]; then
+            install -d ${D}/usr/AGL/apps/${t}
+            install -m 0644 ${B}/build-${t}/*-${t}.wgt ${D}/usr/AGL/apps/${t}/
+        elif [ "${AGLWGT_PACKAGE_WARN}" = "true" ]; then
+            if [ "$t" != "test" ]; then
+                bbwarn "no package found in ${t} widget directory"
+            elif echo ${BPN} | grep -q '^agl-service-' || [ "${AGLWGT_HAVE_TESTS}" = "true" ]; then
+                bbwarn "no package found in ${t} widget directory"
+            fi
+        fi
     done
-    install -d ${D}/${sysconfdir}/agl-postinsts
-    cat > ${D}/${sysconfdir}/agl-postinsts/${POST_INSTALL_SCRIPT} <<EOF
+
+    if [ "${AGLWGT_AUTOINSTALL_${PN}}" != "0" ]; then
+        # For now assume autoinstall of the release versions
+        rm -rf ${D}/usr/AGL/apps/autoinstall
+        ln -sf release ${D}/usr/AGL/apps/autoinstall
+
+        APP_FILES=""
+        for file in ${D}/usr/AGL/apps/autoinstall/*.wgt; do
+            APP_FILES="${APP_FILES} $(basename $file)";
+        done
+        install -d ${D}/${sysconfdir}/agl-postinsts
+        cat > ${D}/${sysconfdir}/agl-postinsts/${POST_INSTALL_SCRIPT} <<EOF
 #!/bin/sh -e
 for file in ${APP_FILES}; do
     /usr/bin/afm-install install /usr/AGL/apps/autoinstall/\$file
@@ -136,23 +135,31 @@ done
 sync
 ${EXTRA_WGT_POSTINSTALL}
 EOF
-    chmod a+x ${D}/${sysconfdir}/agl-postinsts/${POST_INSTALL_SCRIPT}
+        chmod a+x ${D}/${sysconfdir}/agl-postinsts/${POST_INSTALL_SCRIPT}
+    fi
 }
 
-FILES_${PN} += "/usr/AGL/apps/autoinstall/*.wgt \
-    /usr/AGL/apps/manualinstall/*.wgt \
-    /usr/AGL/apps/testwgt/*.wgt \
-    /usr/AGL/apps/debugwgt/*.wgt \
-    /usr/AGL/apps/coveragewgt/*.wgt \
-    ${sysconfdir}/agl-postinsts/${POST_INSTALL_SCRIPT} \
-    "
-
 do_install() {
 }
 
 addtask aglwgt_deploy  before do_package after do_install
 addtask aglwgt_package before do_aglwgt_deploy after do_compile
 
+PACKAGES += "${PN}-test ${PN}-coverage"
+
+FILES_${PN} += " \
+    /usr/AGL/apps/release/*.wgt \
+    /usr/AGL/apps/autoinstall \
+    /usr/AGL/apps/manualinstall \
+    ${sysconfdir}/agl-postinsts/${POST_INSTALL_SCRIPT} \
+"
+FILES_${PN}-test = "/usr/AGL/apps/test/*.wgt"
+FILES_${PN}-dbg = "/usr/AGL/apps/debug/*.wgt"
+FILES_${PN}-coverage = "/usr/AGL/apps/coverage/*.wgt"
+
+# Test widgets need the base widget
+RDEPENDS_${PN}-test = "${PN}"
+
 # Signature keys
 # These are default keys for development purposes !
 # Change it for production.