xref: /OK3568_Linux_fs/yocto/poky/meta/lib/oeqa/selftest/cases/layerappend.py (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#
2*4882a593Smuzhiyun# SPDX-License-Identifier: MIT
3*4882a593Smuzhiyun#
4*4882a593Smuzhiyun
5*4882a593Smuzhiyunimport os
6*4882a593Smuzhiyun
7*4882a593Smuzhiyunfrom oeqa.selftest.case import OESelftestTestCase
8*4882a593Smuzhiyunfrom oeqa.utils.commands import bitbake, get_bb_var
9*4882a593Smuzhiyunimport oeqa.utils.ftools as ftools
10*4882a593Smuzhiyun
11*4882a593Smuzhiyunclass LayerAppendTests(OESelftestTestCase):
12*4882a593Smuzhiyun    layerconf = """
13*4882a593Smuzhiyun# We have a conf and classes directory, append to BBPATH
14*4882a593SmuzhiyunBBPATH .= ":${LAYERDIR}"
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun# We have a recipes directory, add to BBFILES
17*4882a593SmuzhiyunBBFILES += "${LAYERDIR}/recipes*/*.bb ${LAYERDIR}/recipes*/*.bbappend"
18*4882a593Smuzhiyun
19*4882a593SmuzhiyunBBFILE_COLLECTIONS += "meta-layerINT"
20*4882a593SmuzhiyunBBFILE_PATTERN_meta-layerINT := "^${LAYERDIR}/"
21*4882a593SmuzhiyunBBFILE_PRIORITY_meta-layerINT = "6"
22*4882a593Smuzhiyun"""
23*4882a593Smuzhiyun    recipe = """
24*4882a593SmuzhiyunLICENSE="CLOSED"
25*4882a593SmuzhiyunINHIBIT_DEFAULT_DEPS = "1"
26*4882a593Smuzhiyun
27*4882a593Smuzhiyunpython do_build() {
28*4882a593Smuzhiyun    bb.plain('Building ...')
29*4882a593Smuzhiyun}
30*4882a593Smuzhiyunaddtask build
31*4882a593Smuzhiyun"""
32*4882a593Smuzhiyun    append = """
33*4882a593SmuzhiyunFILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
34*4882a593Smuzhiyun
35*4882a593SmuzhiyunSRC_URI:append = " file://appendtest.txt"
36*4882a593Smuzhiyun
37*4882a593Smuzhiyunsysroot_stage_all:append() {
38*4882a593Smuzhiyun	install -m 644 ${WORKDIR}/appendtest.txt ${SYSROOT_DESTDIR}/
39*4882a593Smuzhiyun}
40*4882a593Smuzhiyun
41*4882a593Smuzhiyun"""
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun    append2 = """
44*4882a593SmuzhiyunFILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
45*4882a593Smuzhiyun
46*4882a593SmuzhiyunSRC_URI:append = " file://appendtest.txt"
47*4882a593Smuzhiyun"""
48*4882a593Smuzhiyun    layerappend = ''
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun    def tearDownLocal(self):
51*4882a593Smuzhiyun        if self.layerappend:
52*4882a593Smuzhiyun            ftools.remove_from_file(self.builddir + "/conf/bblayers.conf", self.layerappend)
53*4882a593Smuzhiyun        super(LayerAppendTests, self).tearDownLocal()
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun    def test_layer_appends(self):
56*4882a593Smuzhiyun        corebase = get_bb_var("COREBASE")
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun        for l in ["0", "1", "2"]:
59*4882a593Smuzhiyun            layer = os.path.join(corebase, "meta-layertest" + l)
60*4882a593Smuzhiyun            self.assertFalse(os.path.exists(layer))
61*4882a593Smuzhiyun            os.mkdir(layer)
62*4882a593Smuzhiyun            os.mkdir(layer + "/conf")
63*4882a593Smuzhiyun            with open(layer + "/conf/layer.conf", "w") as f:
64*4882a593Smuzhiyun                f.write(self.layerconf.replace("INT", l))
65*4882a593Smuzhiyun            os.mkdir(layer + "/recipes-test")
66*4882a593Smuzhiyun            if l == "0":
67*4882a593Smuzhiyun                with open(layer + "/recipes-test/layerappendtest.bb", "w") as f:
68*4882a593Smuzhiyun                    f.write(self.recipe)
69*4882a593Smuzhiyun            elif l == "1":
70*4882a593Smuzhiyun                with open(layer + "/recipes-test/layerappendtest.bbappend", "w") as f:
71*4882a593Smuzhiyun                    f.write(self.append)
72*4882a593Smuzhiyun                os.mkdir(layer + "/recipes-test/layerappendtest")
73*4882a593Smuzhiyun                with open(layer + "/recipes-test/layerappendtest/appendtest.txt", "w") as f:
74*4882a593Smuzhiyun                    f.write("Layer 1 test")
75*4882a593Smuzhiyun            elif l == "2":
76*4882a593Smuzhiyun                with open(layer + "/recipes-test/layerappendtest.bbappend", "w") as f:
77*4882a593Smuzhiyun                    f.write(self.append2)
78*4882a593Smuzhiyun                os.mkdir(layer + "/recipes-test/layerappendtest")
79*4882a593Smuzhiyun                with open(layer + "/recipes-test/layerappendtest/appendtest.txt", "w") as f:
80*4882a593Smuzhiyun                    f.write("Layer 2 test")
81*4882a593Smuzhiyun            self.track_for_cleanup(layer)
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun        self.layerappend = "BBLAYERS += \"{0}/meta-layertest0 {0}/meta-layertest1 {0}/meta-layertest2\"".format(corebase)
84*4882a593Smuzhiyun        ftools.append_file(self.builddir + "/conf/bblayers.conf", self.layerappend)
85*4882a593Smuzhiyun        stagingdir = get_bb_var("SYSROOT_DESTDIR", "layerappendtest")
86*4882a593Smuzhiyun        bitbake("layerappendtest")
87*4882a593Smuzhiyun        data = ftools.read_file(stagingdir + "/appendtest.txt")
88*4882a593Smuzhiyun        self.assertEqual(data, "Layer 2 test")
89*4882a593Smuzhiyun        os.remove(corebase + "/meta-layertest2/recipes-test/layerappendtest/appendtest.txt")
90*4882a593Smuzhiyun        bitbake("layerappendtest")
91*4882a593Smuzhiyun        data = ftools.read_file(stagingdir + "/appendtest.txt")
92*4882a593Smuzhiyun        self.assertEqual(data, "Layer 1 test")
93*4882a593Smuzhiyun        with open(corebase + "/meta-layertest2/recipes-test/layerappendtest/appendtest.txt", "w") as f:
94*4882a593Smuzhiyun            f.write("Layer 2 test")
95*4882a593Smuzhiyun        bitbake("layerappendtest")
96*4882a593Smuzhiyun        data = ftools.read_file(stagingdir + "/appendtest.txt")
97*4882a593Smuzhiyun        self.assertEqual(data, "Layer 2 test")
98