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