1c342db35SBrad Bishop# 292b42cb3SPatrick Williams# Copyright OpenEmbedded Contributors 392b42cb3SPatrick Williams# 4c342db35SBrad Bishop# SPDX-License-Identifier: MIT 5c342db35SBrad Bishop# 6c342db35SBrad Bishop 7eb8dc403SDave Cobbleyimport os 8eb8dc403SDave Cobbley 9eb8dc403SDave Cobbleyfrom oeqa.selftest.case import OESelftestTestCase 1045852739SPatrick Williamsfrom oeqa.utils.commands import bitbake, get_bb_var 11eb8dc403SDave Cobbleyimport oeqa.utils.ftools as ftools 12eb8dc403SDave Cobbley 13eb8dc403SDave Cobbleyclass LayerAppendTests(OESelftestTestCase): 14eb8dc403SDave Cobbley layerconf = """ 15eb8dc403SDave Cobbley# We have a conf and classes directory, append to BBPATH 16eb8dc403SDave CobbleyBBPATH .= ":${LAYERDIR}" 17eb8dc403SDave Cobbley 18eb8dc403SDave Cobbley# We have a recipes directory, add to BBFILES 19eb8dc403SDave CobbleyBBFILES += "${LAYERDIR}/recipes*/*.bb ${LAYERDIR}/recipes*/*.bbappend" 20eb8dc403SDave Cobbley 21eb8dc403SDave CobbleyBBFILE_COLLECTIONS += "meta-layerINT" 22eb8dc403SDave CobbleyBBFILE_PATTERN_meta-layerINT := "^${LAYERDIR}/" 23eb8dc403SDave CobbleyBBFILE_PRIORITY_meta-layerINT = "6" 24eb8dc403SDave Cobbley""" 25eb8dc403SDave Cobbley recipe = """ 26eb8dc403SDave CobbleyLICENSE="CLOSED" 27eb8dc403SDave CobbleyINHIBIT_DEFAULT_DEPS = "1" 28eb8dc403SDave Cobbley 29eb8dc403SDave Cobbleypython do_build() { 30eb8dc403SDave Cobbley bb.plain('Building ...') 31eb8dc403SDave Cobbley} 32eb8dc403SDave Cobbleyaddtask build 33eb8dc403SDave Cobbley""" 34eb8dc403SDave Cobbley append = """ 35213cb269SPatrick WilliamsFILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" 36eb8dc403SDave Cobbley 37213cb269SPatrick WilliamsSRC_URI:append = " file://appendtest.txt" 38eb8dc403SDave Cobbley 39213cb269SPatrick Williamssysroot_stage_all:append() { 40*edff4923SAndrew Geissler install -m 644 ${UNPACKDIR}/appendtest.txt ${SYSROOT_DESTDIR}/ 41eb8dc403SDave Cobbley} 42eb8dc403SDave Cobbley 43eb8dc403SDave Cobbley""" 44eb8dc403SDave Cobbley 45eb8dc403SDave Cobbley append2 = """ 46213cb269SPatrick WilliamsFILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" 47eb8dc403SDave Cobbley 48213cb269SPatrick WilliamsSRC_URI:append = " file://appendtest.txt" 49eb8dc403SDave Cobbley""" 50eb8dc403SDave Cobbley layerappend = '' 51eb8dc403SDave Cobbley 52eb8dc403SDave Cobbley def tearDownLocal(self): 53eb8dc403SDave Cobbley if self.layerappend: 54eb8dc403SDave Cobbley ftools.remove_from_file(self.builddir + "/conf/bblayers.conf", self.layerappend) 55eb8dc403SDave Cobbley super(LayerAppendTests, self).tearDownLocal() 56eb8dc403SDave Cobbley 57eb8dc403SDave Cobbley def test_layer_appends(self): 58eb8dc403SDave Cobbley corebase = get_bb_var("COREBASE") 59eb8dc403SDave Cobbley 60eb8dc403SDave Cobbley for l in ["0", "1", "2"]: 61eb8dc403SDave Cobbley layer = os.path.join(corebase, "meta-layertest" + l) 62eb8dc403SDave Cobbley self.assertFalse(os.path.exists(layer)) 63eb8dc403SDave Cobbley os.mkdir(layer) 64eb8dc403SDave Cobbley os.mkdir(layer + "/conf") 65eb8dc403SDave Cobbley with open(layer + "/conf/layer.conf", "w") as f: 66eb8dc403SDave Cobbley f.write(self.layerconf.replace("INT", l)) 67eb8dc403SDave Cobbley os.mkdir(layer + "/recipes-test") 68eb8dc403SDave Cobbley if l == "0": 69eb8dc403SDave Cobbley with open(layer + "/recipes-test/layerappendtest.bb", "w") as f: 70eb8dc403SDave Cobbley f.write(self.recipe) 71eb8dc403SDave Cobbley elif l == "1": 72eb8dc403SDave Cobbley with open(layer + "/recipes-test/layerappendtest.bbappend", "w") as f: 73eb8dc403SDave Cobbley f.write(self.append) 74eb8dc403SDave Cobbley os.mkdir(layer + "/recipes-test/layerappendtest") 75eb8dc403SDave Cobbley with open(layer + "/recipes-test/layerappendtest/appendtest.txt", "w") as f: 76eb8dc403SDave Cobbley f.write("Layer 1 test") 77eb8dc403SDave Cobbley elif l == "2": 78eb8dc403SDave Cobbley with open(layer + "/recipes-test/layerappendtest.bbappend", "w") as f: 79eb8dc403SDave Cobbley f.write(self.append2) 80eb8dc403SDave Cobbley os.mkdir(layer + "/recipes-test/layerappendtest") 81eb8dc403SDave Cobbley with open(layer + "/recipes-test/layerappendtest/appendtest.txt", "w") as f: 82eb8dc403SDave Cobbley f.write("Layer 2 test") 83eb8dc403SDave Cobbley self.track_for_cleanup(layer) 84eb8dc403SDave Cobbley 85eb8dc403SDave Cobbley self.layerappend = "BBLAYERS += \"{0}/meta-layertest0 {0}/meta-layertest1 {0}/meta-layertest2\"".format(corebase) 86eb8dc403SDave Cobbley ftools.append_file(self.builddir + "/conf/bblayers.conf", self.layerappend) 87eb8dc403SDave Cobbley stagingdir = get_bb_var("SYSROOT_DESTDIR", "layerappendtest") 88eb8dc403SDave Cobbley bitbake("layerappendtest") 89eb8dc403SDave Cobbley data = ftools.read_file(stagingdir + "/appendtest.txt") 90eb8dc403SDave Cobbley self.assertEqual(data, "Layer 2 test") 91eb8dc403SDave Cobbley os.remove(corebase + "/meta-layertest2/recipes-test/layerappendtest/appendtest.txt") 92eb8dc403SDave Cobbley bitbake("layerappendtest") 93eb8dc403SDave Cobbley data = ftools.read_file(stagingdir + "/appendtest.txt") 94eb8dc403SDave Cobbley self.assertEqual(data, "Layer 1 test") 95eb8dc403SDave Cobbley with open(corebase + "/meta-layertest2/recipes-test/layerappendtest/appendtest.txt", "w") as f: 96eb8dc403SDave Cobbley f.write("Layer 2 test") 97eb8dc403SDave Cobbley bitbake("layerappendtest") 98eb8dc403SDave Cobbley data = ftools.read_file(stagingdir + "/appendtest.txt") 99eb8dc403SDave Cobbley self.assertEqual(data, "Layer 2 test") 100