From patchwork Sat May 10 08:43:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ross Burton X-Patchwork-Id: 62725 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 71752C3ABCF for ; Sat, 10 May 2025 08:44:16 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web10.6813.1746866652255095509 for ; Sat, 10 May 2025 01:44:12 -0700 Authentication-Results: mx.groups.io; dkim=none (message not signed); spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: ross.burton@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D0A60153B for ; Sat, 10 May 2025 01:44:00 -0700 (PDT) Received: from cesw-amp-gbt-1s-m12830-04.lab.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 754C13F5A1 for ; Sat, 10 May 2025 01:44:11 -0700 (PDT) From: Ross Burton To: openembedded-core@lists.openembedded.org Subject: [PATCH 11/23] oeqa/sdk/meson: generalise test case Date: Sat, 10 May 2025 09:43:44 +0100 Message-ID: <20250510084400.269726-11-ross.burton@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250510084400.269726-1-ross.burton@arm.com> References: <20250510084400.269726-1-ross.burton@arm.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Sat, 10 May 2025 08:44:16 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/216259 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 --- meta/lib/oeqa/sdk/cases/meson.py | 51 +++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/meta/lib/oeqa/sdk/cases/meson.py b/meta/lib/oeqa/sdk/cases/meson.py index 6f773544e3d..4fb101f9f73 100644 --- a/meta/lib/oeqa/sdk/cases/meson.py +++ b/meta/lib/oeqa/sdk/cases/meson.py @@ -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"]) + self.assertTrue(os.path.isdir(sourcedir)) - 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.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"))