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