]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
oeqa/sdk/meson: generalise test case
authorRoss Burton <ross.burton@arm.com>
Sat, 10 May 2025 08:43:44 +0000 (09:43 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Mon, 12 May 2025 09:52:52 +0000 (10:52 +0100)
Refactor this test case so the generic "build a meson project" code is
separated out and can be reused.

Also currently meson inside eSDKs only works with fully populated eSDKs,
but our testing uses minimal eSDKS, so skip the test if the eSDK is a
minimal build.  A bug has been filed to resolve this.

Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/lib/oeqa/sdk/cases/meson.py

index 6f773544e3d460df7d1da2d2ba640415a279a6df..4fb101f9f7342b08a073264c5819d95e4f1c6daf 100644 (file)
@@ -10,37 +10,54 @@ import tempfile
 import unittest
 
 from oeqa.sdk.case import OESDKTestCase
+from oeqa.sdkext.context import OESDKExtTestContext
 from oeqa.utils.subprocesstweak import errors_have_output
 errors_have_output()
 
-class MesonTest(OESDKTestCase):
-    """
-    Test that Meson builds correctly.
-    """
+class MesonTestBase(OESDKTestCase):
     def setUp(self):
         libc = self.td.get("TCLIBC")
         if libc in [ 'newlib' ]:
             raise unittest.SkipTest("MesonTest class: SDK doesn't contain a supported C library")
 
+        if isinstance(self.tc, OESDKExtTestContext):
+            self.skipTest(f"{self.id()} does not support eSDK (https://bugzilla.yoctoproject.org/show_bug.cgi?id=15854)")
+
         self.ensure_host_package("meson")
+        self.ensure_host_package("pkgconfig")
+
+    def build_meson(self, sourcedir, builddir, installdir=None, options=""):
+        """
+        Given a source tree in sourcedir, configure it to build in builddir with
+        the specified options, and if installdir is set also install.
+        """
+        log = self._run(f"meson setup --warnlevel 1 {builddir} {sourcedir} {options}")
+
+        # Check that Meson thinks we're doing a cross build and not a native
+        self.assertIn("Build type: cross build", log)
+
+        self._run(f"meson compile -C {builddir} -v")
+
+        if installdir:
+            self._run(f"meson install -C {builddir} --destdir {installdir}")
+
+class MesonTest(MesonTestBase):
+    """
+    Test that Meson builds correctly.
+    """
 
     def test_epoxy(self):
         with tempfile.TemporaryDirectory(prefix="epoxy", dir=self.tc.sdk_dir) as testdir:
             tarball = self.fetch(testdir, self.td["DL_DIR"], "https://github.com/anholt/libepoxy/releases/download/1.5.3/libepoxy-1.5.3.tar.xz")
 
-            dirs = {}
-            dirs["source"] = os.path.join(testdir, "libepoxy-1.5.3")
-            dirs["build"] = os.path.join(testdir, "build")
-            dirs["install"] = os.path.join(testdir, "install")
+            sourcedir = os.path.join(testdir, "libepoxy-1.5.3")
+            builddir = os.path.join(testdir, "build")
+            installdir = os.path.join(testdir, "install")
 
             subprocess.check_output(["tar", "xf", tarball, "-C", testdir], stderr=subprocess.STDOUT)
-            self.assertTrue(os.path.isdir(dirs["source"]))
-            os.makedirs(dirs["build"])
-
-            log = self._run("meson --warnlevel 1 -Degl=no -Dglx=no -Dx11=false {build} {source}".format(**dirs))
-            # Check that Meson thinks we're doing a cross build and not a native
-            self.assertIn("Build type: cross build", log)
-            self._run("ninja -C {build} -v".format(**dirs))
-            self._run("DESTDIR={install} ninja -C {build} -v install".format(**dirs))
+            self.assertTrue(os.path.isdir(sourcedir))
 
-            self.check_elf(os.path.join(dirs["install"], "usr", "local", "lib", "libepoxy.so"))
+            os.makedirs(builddir)
+            self.build_meson(sourcedir, builddir, installdir, "-Degl=no -Dglx=no -Dx11=false")
+            self.assertTrue(os.path.isdir(installdir))
+            self.check_elf(os.path.join(installdir, "usr", "local", "lib", "libepoxy.so"))