aboutsummaryrefslogtreecommitdiffstats
path: root/meta-app-framework/classes/aglwgt.bbclass
blob: b5f7be8bf0220974a3981aed0ed5ef11be607f41 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#
# aglwgt bbclass
#
# Jan-Simon Moeller, jsmoeller@linuxfoundation.org
#
# This class expects a "make package" target in the makefile
# which creates the wgt files in the package/ subfolder.
# The makefile needs to use wgtpkg-pack.
#

# 'wgtpkg-pack' in af-main-native is required.
DEPENDS_append = " af-main-native"

# for bindings  af-binder is required.
DEPENDS_append = " af-binder"

# for bindings  that use the cmake-apps-module
DEPENDS_append = " cmake-apps-module-native"

# for hal bindings genskel is required.
DEPENDS_append = " af-binder-devtools-native"

# 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"

AGLWGT_EXTRA_BUILD_ARGS = "VERBOSE=TRUE ${PARALLEL_MAKE}"

# 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}-debug = "1"
ALLOW_EMPTY_${PN}-test = "1"


do_aglwgt_package()  {
    bldcmd=${S}/autobuild/agl/autobuild
    if [ ! -x "$bldcmd" ]; then
        bbfatal "Missing autobuild/agl/autobuild script"
    fi

    cd ${B}
    if ! $bldcmd package BUILD_DIR=${B} DEST=${B}/build-release ${AGLWGT_EXTRA_BUILD_ARGS}; then
        bbwarn "Target: package failed"
    fi

    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=${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=${B}/build-coverage ${AGLWGT_EXTRA_BUILD_ARGS}; then
        bbwarn "Target: package-coverage failed"
    fi
}

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() {
    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

    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

    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
done
sync
${EXTRA_WGT_POSTINSTALL}
EOF
        chmod a+x ${D}/${sysconfdir}/agl-postinsts/${POST_INSTALL_SCRIPT}
    fi
}

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}-debug ${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}-debug = "/usr/AGL/apps/debug/*.wgt"
FILES_${PN}-coverage = "/usr/AGL/apps/coverage/*.wgt"

# Test widgets need the parent widget and the test framework
RDEPENDS_${PN}-test = "${PN} afb-test"

# Signature keys
# These are default keys for development purposes !
# Change it for production.
WGTPKG_AUTOSIGN_0_agl-sign-wgts ??= "${WORKDIR}/recipe-sysroot-native/usr/share/afm/keys/developer.key.pem:${WORKDIR}/recipe-sysroot-native/usr/share/afm/certs/developer.cert.pem"
WGTPKG_AUTOSIGN_1_agl-sign-wgts ??= "${WORKDIR}/recipe-sysroot-native/usr/share/afm/keys/platform.key.pem:${WORKDIR}/recipe-sysroot-native/usr/share/afm/certs/platform.cert.pem"

export WGTPKG_AUTOSIGN_0
export WGTPKG_AUTOSIGN_1