فهرست منبع

yocto-check-layer: Allow OE-Core to be tested

For unknown reasons we've never seemingly run the check layer script
against OE-Core itself. This isn't entirely straightforward as the core
layer is a bit of a special case, we can't for example compare signatures
against ourselve and we can't remove core from bblayers.conf.

Core does have distro, machine and software components too, in the case
of distro, our fallback default settings. Whilst the qemu machines could
be split into a seperate layer directory, core wouldn't then parse at all
standalone due to the lack of any machine so it seems a bit pointless to
do that.

These changes tweak the script to handle core's special cases, specifically
to allow distro and machine directories and to account for the README placed
a directory level higher than other layers.

(From OE-Core rev: ba312ed228507d05f280aeb96819d671b01400b8)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Richard Purdie 2 سال پیش
والد
کامیت
7458ad340f

+ 8 - 3
scripts/lib/checklayer/__init__.py

@@ -16,6 +16,7 @@ class LayerType(Enum):
     BSP = 0
     BSP = 0
     DISTRO = 1
     DISTRO = 1
     SOFTWARE = 2
     SOFTWARE = 2
+    CORE = 3
     ERROR_NO_LAYER_CONF = 98
     ERROR_NO_LAYER_CONF = 98
     ERROR_BSP_DISTRO = 99
     ERROR_BSP_DISTRO = 99
 
 
@@ -106,7 +107,13 @@ def _detect_layer(layer_path):
         if distros:
         if distros:
             is_distro = True
             is_distro = True
 
 
-    if is_bsp and is_distro:
+    layer['collections'] = _get_layer_collections(layer['path'])
+
+    if layer_name == "meta" and "core" in layer['collections']:
+        layer['type'] = LayerType.CORE
+        layer['conf']['machines'] = machines
+        layer['conf']['distros'] = distros
+    elif is_bsp and is_distro:
         layer['type'] = LayerType.ERROR_BSP_DISTRO
         layer['type'] = LayerType.ERROR_BSP_DISTRO
     elif is_bsp:
     elif is_bsp:
         layer['type'] = LayerType.BSP
         layer['type'] = LayerType.BSP
@@ -117,8 +124,6 @@ def _detect_layer(layer_path):
     else:
     else:
         layer['type'] = LayerType.SOFTWARE
         layer['type'] = LayerType.SOFTWARE
 
 
-    layer['collections'] = _get_layer_collections(layer['path'])
-
     return layer
     return layer
 
 
 def detect_layers(layer_directories, no_auto):
 def detect_layers(layer_directories, no_auto):

+ 1 - 1
scripts/lib/checklayer/cases/bsp.py

@@ -11,7 +11,7 @@ from checklayer.case import OECheckLayerTestCase
 class BSPCheckLayer(OECheckLayerTestCase):
 class BSPCheckLayer(OECheckLayerTestCase):
     @classmethod
     @classmethod
     def setUpClass(self):
     def setUpClass(self):
-        if self.tc.layer['type'] != LayerType.BSP:
+        if self.tc.layer['type'] not in (LayerType.BSP, LayerType.CORE):
             raise unittest.SkipTest("BSPCheckLayer: Layer %s isn't BSP one." %\
             raise unittest.SkipTest("BSPCheckLayer: Layer %s isn't BSP one." %\
                 self.tc.layer['name'])
                 self.tc.layer['name'])
 
 

+ 3 - 0
scripts/lib/checklayer/cases/common.py

@@ -12,6 +12,9 @@ from checklayer.case import OECheckLayerTestCase
 
 
 class CommonCheckLayer(OECheckLayerTestCase):
 class CommonCheckLayer(OECheckLayerTestCase):
     def test_readme(self):
     def test_readme(self):
+        if self.tc.layer['type'] == LayerType.CORE:
+            raise unittest.SkipTest("Core layer's README is top level")
+
         # The top-level README file may have a suffix (like README.rst or README.txt).
         # The top-level README file may have a suffix (like README.rst or README.txt).
         readme_files = glob.glob(os.path.join(self.tc.layer['path'], '[Rr][Ee][Aa][Dd][Mm][Ee]*'))
         readme_files = glob.glob(os.path.join(self.tc.layer['path'], '[Rr][Ee][Aa][Dd][Mm][Ee]*'))
         self.assertTrue(len(readme_files) > 0,
         self.assertTrue(len(readme_files) > 0,

+ 1 - 1
scripts/lib/checklayer/cases/distro.py

@@ -11,7 +11,7 @@ from checklayer.case import OECheckLayerTestCase
 class DistroCheckLayer(OECheckLayerTestCase):
 class DistroCheckLayer(OECheckLayerTestCase):
     @classmethod
     @classmethod
     def setUpClass(self):
     def setUpClass(self):
-        if self.tc.layer['type'] != LayerType.DISTRO:
+        if self.tc.layer['type'] not in (LayerType.DISTRO, LayerType.CORE):
             raise unittest.SkipTest("DistroCheckLayer: Layer %s isn't Distro one." %\
             raise unittest.SkipTest("DistroCheckLayer: Layer %s isn't Distro one." %\
                 self.tc.layer['name'])
                 self.tc.layer['name'])
 
 

+ 2 - 3
scripts/yocto-check-layer

@@ -168,14 +168,13 @@ def main():
 
 
     layers_tested = 0
     layers_tested = 0
     for layer in layers:
     for layer in layers:
-        if layer['type'] == LayerType.ERROR_NO_LAYER_CONF or \
-                layer['type'] == LayerType.ERROR_BSP_DISTRO:
+        if layer['type'] in (LayerType.ERROR_NO_LAYER_CONF, LayerType.ERROR_BSP_DISTRO):
             continue
             continue
 
 
         # Reset to a clean backup copy for each run
         # Reset to a clean backup copy for each run
         shutil.copyfile(bblayersconf + '.backup', bblayersconf)
         shutil.copyfile(bblayersconf + '.backup', bblayersconf)
 
 
-        if check_bblayers(bblayersconf, layer['path'], logger):
+        if layer['type'] not in (LayerType.CORE, ) and check_bblayers(bblayersconf, layer['path'], logger):
             logger.info("%s already in %s. To capture initial signatures, layer under test should not present "
             logger.info("%s already in %s. To capture initial signatures, layer under test should not present "
                "in BBLAYERS. Please remove %s from BBLAYERS." % (layer['name'], bblayersconf, layer['name']))
                "in BBLAYERS. Please remove %s from BBLAYERS." % (layer['name'], bblayersconf, layer['name']))
             results[layer['name']] = None
             results[layer['name']] = None