summaryrefslogtreecommitdiffstats
path: root/meta/lib/oeqa/sdk/cases
diff options
context:
space:
mode:
Diffstat (limited to 'meta/lib/oeqa/sdk/cases')
-rw-r--r--meta/lib/oeqa/sdk/cases/autotools.py16
-rw-r--r--meta/lib/oeqa/sdk/cases/cmake.py8
-rw-r--r--meta/lib/oeqa/sdk/cases/gcc.py4
-rw-r--r--meta/lib/oeqa/sdk/cases/gtk3.py48
-rw-r--r--meta/lib/oeqa/sdk/cases/kmod.py39
-rw-r--r--meta/lib/oeqa/sdk/cases/makefile.py6
-rw-r--r--meta/lib/oeqa/sdk/cases/manifest.py26
-rw-r--r--meta/lib/oeqa/sdk/cases/maturin.py56
-rw-r--r--meta/lib/oeqa/sdk/cases/meson.py64
-rw-r--r--meta/lib/oeqa/sdk/cases/perl.py5
-rw-r--r--meta/lib/oeqa/sdk/cases/python.py5
-rw-r--r--meta/lib/oeqa/sdk/cases/rust.py2
12 files changed, 187 insertions, 92 deletions
diff --git a/meta/lib/oeqa/sdk/cases/autotools.py b/meta/lib/oeqa/sdk/cases/autotools.py
index 848e9392ec..ee6c522551 100644
--- a/meta/lib/oeqa/sdk/cases/autotools.py
+++ b/meta/lib/oeqa/sdk/cases/autotools.py
@@ -7,6 +7,7 @@
7import os 7import os
8import tempfile 8import tempfile
9import subprocess 9import subprocess
10import unittest
10 11
11from oeqa.sdk.case import OESDKTestCase 12from oeqa.sdk.case import OESDKTestCase
12from oeqa.utils.subprocesstweak import errors_have_output 13from oeqa.utils.subprocesstweak import errors_have_output
@@ -16,6 +17,11 @@ class AutotoolsTest(OESDKTestCase):
16 """ 17 """
17 Check that autotools will cross-compile correctly. 18 Check that autotools will cross-compile correctly.
18 """ 19 """
20 def setUp(self):
21 libc = self.td.get("TCLIBC")
22 if libc in [ 'newlib' ]:
23 raise unittest.SkipTest("AutotoolsTest class: SDK doesn't contain a supported C library")
24
19 def test_cpio(self): 25 def test_cpio(self):
20 with tempfile.TemporaryDirectory(prefix="cpio-", dir=self.tc.sdk_dir) as testdir: 26 with tempfile.TemporaryDirectory(prefix="cpio-", dir=self.tc.sdk_dir) as testdir:
21 tarball = self.fetch(testdir, self.td["DL_DIR"], "https://ftp.gnu.org/gnu/cpio/cpio-2.15.tar.gz") 27 tarball = self.fetch(testdir, self.td["DL_DIR"], "https://ftp.gnu.org/gnu/cpio/cpio-2.15.tar.gz")
@@ -29,8 +35,14 @@ class AutotoolsTest(OESDKTestCase):
29 self.assertTrue(os.path.isdir(dirs["source"])) 35 self.assertTrue(os.path.isdir(dirs["source"]))
30 os.makedirs(dirs["build"]) 36 os.makedirs(dirs["build"])
31 37
32 self._run("cd {build} && {source}/configure $CONFIGURE_FLAGS".format(**dirs)) 38 self._run("cd {build} && {source}/configure CFLAGS='-std=gnu17 -Dbool=int -Dtrue=1 -Dfalse=0 -Wno-error=implicit-function-declaration' $CONFIGURE_FLAGS".format(**dirs))
33 self._run("cd {build} && make -j".format(**dirs)) 39
40 # Check that configure detected the target correctly
41 with open(os.path.join(dirs["build"], "config.log")) as f:
42 host_sys = self.td["HOST_SYS"]
43 self.assertIn(f"host_alias='{host_sys}'\n", f.readlines())
44
45 self._run("cd {build} && make CFLAGS='-std=gnu17 -Dbool=int -Dtrue=1 -Dfalse=0 -Wno-error=implicit-function-declaration' -j".format(**dirs))
34 self._run("cd {build} && make install DESTDIR={install}".format(**dirs)) 46 self._run("cd {build} && make install DESTDIR={install}".format(**dirs))
35 47
36 self.check_elf(os.path.join(dirs["install"], "usr", "local", "bin", "cpio")) 48 self.check_elf(os.path.join(dirs["install"], "usr", "local", "bin", "cpio"))
diff --git a/meta/lib/oeqa/sdk/cases/cmake.py b/meta/lib/oeqa/sdk/cases/cmake.py
index db7d826a38..070682ef08 100644
--- a/meta/lib/oeqa/sdk/cases/cmake.py
+++ b/meta/lib/oeqa/sdk/cases/cmake.py
@@ -19,9 +19,11 @@ class CMakeTest(OESDKTestCase):
19 """ 19 """
20 20
21 def setUp(self): 21 def setUp(self):
22 if not (self.tc.hasHostPackage("nativesdk-cmake") or 22 libc = self.td.get("TCLIBC")
23 self.tc.hasHostPackage("cmake-native")): 23 if libc in [ 'newlib' ]:
24 raise unittest.SkipTest("CMakeTest: needs cmake") 24 raise unittest.SkipTest("CMakeTest class: SDK doesn't contain a supported C library")
25
26 self.ensure_host_package("cmake")
25 27
26 def test_assimp(self): 28 def test_assimp(self):
27 with tempfile.TemporaryDirectory(prefix="assimp", dir=self.tc.sdk_dir) as testdir: 29 with tempfile.TemporaryDirectory(prefix="assimp", dir=self.tc.sdk_dir) as testdir:
diff --git a/meta/lib/oeqa/sdk/cases/gcc.py b/meta/lib/oeqa/sdk/cases/gcc.py
index fc28b9c3d4..e810d2c42b 100644
--- a/meta/lib/oeqa/sdk/cases/gcc.py
+++ b/meta/lib/oeqa/sdk/cases/gcc.py
@@ -26,6 +26,10 @@ class GccCompileTest(OESDKTestCase):
26 os.path.join(self.tc.sdk_dir, f)) 26 os.path.join(self.tc.sdk_dir, f))
27 27
28 def setUp(self): 28 def setUp(self):
29 libc = self.td.get("TCLIBC")
30 if libc in [ 'newlib' ]:
31 raise unittest.SkipTest("GccCompileTest class: SDK doesn't contain a supported C library")
32
29 machine = self.td.get("MACHINE") 33 machine = self.td.get("MACHINE")
30 if not (self.tc.hasHostPackage("packagegroup-cross-canadian-%s" % machine) or 34 if not (self.tc.hasHostPackage("packagegroup-cross-canadian-%s" % machine) or
31 self.tc.hasHostPackage("^gcc-", regex=True)): 35 self.tc.hasHostPackage("^gcc-", regex=True)):
diff --git a/meta/lib/oeqa/sdk/cases/gtk3.py b/meta/lib/oeqa/sdk/cases/gtk3.py
index c329c4bb86..cdaf50ed38 100644
--- a/meta/lib/oeqa/sdk/cases/gtk3.py
+++ b/meta/lib/oeqa/sdk/cases/gtk3.py
@@ -7,40 +7,34 @@
7import os 7import os
8import subprocess 8import subprocess
9import tempfile 9import tempfile
10import unittest
11 10
12from oeqa.sdk.case import OESDKTestCase 11from oeqa.sdk.cases.meson import MesonTestBase
12
13from oeqa.utils.subprocesstweak import errors_have_output 13from oeqa.utils.subprocesstweak import errors_have_output
14errors_have_output() 14errors_have_output()
15 15
16class GTK3Test(OESDKTestCase): 16class GTK3Test(MesonTestBase):
17
18 def setUp(self):
19 super().setUp()
20 self.ensure_target_package("gtk+3", "libgtk-3.0", recipe="gtk+3")
21 self.ensure_host_package("glib-2.0-utils", "libglib-2.0-utils", recipe="glib-2.0")
22
17 """ 23 """
18 Test that autotools and GTK+ 3 compiles correctly. 24 Test that autotools and GTK+ 3 compiles correctly.
19 """ 25 """
20 def setUp(self): 26 def test_libhandy(self):
21 if not (self.tc.hasTargetPackage("gtk+3", multilib=True) or \ 27 with tempfile.TemporaryDirectory(prefix="libhandy", dir=self.tc.sdk_dir) as testdir:
22 self.tc.hasTargetPackage("libgtk-3.0", multilib=True)): 28 tarball = self.fetch(testdir, self.td["DL_DIR"], "https://download.gnome.org/sources/libhandy/1.8/libhandy-1.8.3.tar.xz")
23 raise unittest.SkipTest("GalculatorTest class: SDK don't support gtk+3")
24 if not (self.tc.hasHostPackage("nativesdk-gettext-dev") or
25 self.tc.hasHostPackage("gettext-native")):
26 raise unittest.SkipTest("GalculatorTest class: SDK doesn't contain gettext")
27
28 def test_galculator(self):
29 with tempfile.TemporaryDirectory(prefix="galculator", dir=self.tc.sdk_dir) as testdir:
30 tarball = self.fetch(testdir, self.td["DL_DIR"], "http://galculator.mnim.org/downloads/galculator-2.1.4.tar.bz2")
31
32 dirs = {}
33 dirs["source"] = os.path.join(testdir, "galculator-2.1.4")
34 dirs["build"] = os.path.join(testdir, "build")
35 dirs["install"] = os.path.join(testdir, "install")
36 29
37 subprocess.check_output(["tar", "xf", tarball, "-C", testdir], stderr=subprocess.STDOUT) 30 sourcedir = os.path.join(testdir, "libhandy-1.8.3")
38 self.assertTrue(os.path.isdir(dirs["source"])) 31 builddir = os.path.join(testdir, "build")
39 os.makedirs(dirs["build"]) 32 installdir = os.path.join(testdir, "install")
40 33
41 self._run("cd {source} && sed -i -e '/s_preferences.*prefs;/d' src/main.c && autoreconf -i -f -I $OECORE_TARGET_SYSROOT/usr/share/aclocal -I m4".format(**dirs)) 34 subprocess.check_output(["tar", "xf", tarball, "-C", testdir], stderr=subprocess.STDOUT)
42 self._run("cd {build} && {source}/configure $CONFIGURE_FLAGS".format(**dirs)) 35 self.assertTrue(os.path.isdir(sourcedir))
43 self._run("cd {build} && make -j".format(**dirs)) 36 os.makedirs(builddir)
44 self._run("cd {build} && make install DESTDIR={install}".format(**dirs))
45 37
46 self.check_elf(os.path.join(dirs["install"], "usr", "local", "bin", "galculator")) 38 self.build_meson(sourcedir, builddir, installdir, "-Dglade_catalog=disabled -Dintrospection=disabled -Dvapi=false")
39 self.assertTrue(os.path.isdir(installdir))
40 self.check_elf(os.path.join(installdir, "usr", "local", "lib", "libhandy-1.so"))
diff --git a/meta/lib/oeqa/sdk/cases/kmod.py b/meta/lib/oeqa/sdk/cases/kmod.py
new file mode 100644
index 0000000000..0aa6f702e4
--- /dev/null
+++ b/meta/lib/oeqa/sdk/cases/kmod.py
@@ -0,0 +1,39 @@
1#
2# Copyright OpenEmbedded Contributors
3#
4# SPDX-License-Identifier: MIT
5#
6
7import os
8import subprocess
9import tempfile
10
11from oeqa.sdk.case import OESDKTestCase
12from oeqa.sdkext.context import OESDKExtTestContext
13from oeqa.utils.subprocesstweak import errors_have_output
14errors_have_output()
15
16class KernelModuleTest(OESDKTestCase):
17 """
18 Test that out-of-tree kernel modules build.
19 """
20 def test_cryptodev(self):
21 if isinstance(self.tc, OESDKExtTestContext):
22 self.skipTest(f"{self.id()} does not support eSDK (https://bugzilla.yoctoproject.org/show_bug.cgi?id=15850)")
23
24 self.ensure_target_package("kernel-devsrc")
25 # These targets need to be built before kernel modules can be built.
26 self._run("make -j -C $OECORE_TARGET_SYSROOT/usr/src/kernel prepare scripts")
27
28 with tempfile.TemporaryDirectory(prefix="cryptodev", dir=self.tc.sdk_dir) as testdir:
29 git_url = "https://github.com/cryptodev-linux/cryptodev-linux"
30 # This is a knnown-good commit post-1.13 that builds with kernel 6.7+
31 git_sha = "bb8bc7cf60d2c0b097c8b3b0e807f805b577a53f"
32
33 sourcedir = os.path.join(testdir, "cryptodev-linux")
34 subprocess.check_output(["git", "clone", git_url, sourcedir], stderr=subprocess.STDOUT)
35 self.assertTrue(os.path.isdir(sourcedir))
36 subprocess.check_output(["git", "-C", sourcedir, "checkout", git_sha], stderr=subprocess.STDOUT)
37
38 self._run("make -C %s V=1 KERNEL_DIR=$OECORE_TARGET_SYSROOT/usr/src/kernel" % sourcedir)
39 self.check_elf(os.path.join(sourcedir, "cryptodev.ko"))
diff --git a/meta/lib/oeqa/sdk/cases/makefile.py b/meta/lib/oeqa/sdk/cases/makefile.py
index 2ff54ce25f..e1e2484820 100644
--- a/meta/lib/oeqa/sdk/cases/makefile.py
+++ b/meta/lib/oeqa/sdk/cases/makefile.py
@@ -5,6 +5,7 @@
5# 5#
6 6
7import os, tempfile, subprocess 7import os, tempfile, subprocess
8import unittest
8from oeqa.sdk.case import OESDKTestCase 9from oeqa.sdk.case import OESDKTestCase
9from oeqa.utils.subprocesstweak import errors_have_output 10from oeqa.utils.subprocesstweak import errors_have_output
10errors_have_output() 11errors_have_output()
@@ -13,6 +14,11 @@ class MakefileTest(OESDKTestCase):
13 """ 14 """
14 Test that "plain" compilation works, using just $CC $CFLAGS etc. 15 Test that "plain" compilation works, using just $CC $CFLAGS etc.
15 """ 16 """
17 def setUp(self):
18 libc = self.td.get("TCLIBC")
19 if libc in [ 'newlib' ]:
20 raise unittest.SkipTest("MakefileTest class: SDK doesn't contain a supported C library")
21
16 def test_lzip(self): 22 def test_lzip(self):
17 with tempfile.TemporaryDirectory(prefix="lzip", dir=self.tc.sdk_dir) as testdir: 23 with tempfile.TemporaryDirectory(prefix="lzip", dir=self.tc.sdk_dir) as testdir:
18 tarball = self.fetch(testdir, self.td["DL_DIR"], "http://downloads.yoctoproject.org/mirror/sources/lzip-1.19.tar.gz") 24 tarball = self.fetch(testdir, self.td["DL_DIR"], "http://downloads.yoctoproject.org/mirror/sources/lzip-1.19.tar.gz")
diff --git a/meta/lib/oeqa/sdk/cases/manifest.py b/meta/lib/oeqa/sdk/cases/manifest.py
new file mode 100644
index 0000000000..ee59a5f338
--- /dev/null
+++ b/meta/lib/oeqa/sdk/cases/manifest.py
@@ -0,0 +1,26 @@
1#
2# Copyright OpenEmbedded Contributors
3#
4# SPDX-License-Identifier: MIT
5#
6
7from oeqa.sdk.case import OESDKTestCase
8from oeqa.sdkext.context import OESDKExtTestContext
9
10
11class ManifestTest(OESDKTestCase):
12 def test_manifests(self):
13 """
14 Verify that the host and target manifests are not empty, unless this is
15 a minimal eSDK without toolchain in which case they should be empty.
16 """
17 if (
18 isinstance(self.tc, OESDKExtTestContext)
19 and self.td.get("SDK_EXT_TYPE") == "minimal"
20 and self.td.get("SDK_INCLUDE_TOOLCHAIN") == "0"
21 ):
22 self.assertEqual(self.tc.target_pkg_manifest, {})
23 self.assertEqual(self.tc.host_pkg_manifest, {})
24 else:
25 self.assertNotEqual(self.tc.target_pkg_manifest, {})
26 self.assertNotEqual(self.tc.host_pkg_manifest, {})
diff --git a/meta/lib/oeqa/sdk/cases/maturin.py b/meta/lib/oeqa/sdk/cases/maturin.py
index 20f6b553d0..e3e8edc781 100644
--- a/meta/lib/oeqa/sdk/cases/maturin.py
+++ b/meta/lib/oeqa/sdk/cases/maturin.py
@@ -16,44 +16,24 @@ errors_have_output()
16 16
17class MaturinTest(OESDKTestCase): 17class MaturinTest(OESDKTestCase):
18 def setUp(self): 18 def setUp(self):
19 if not ( 19 self.ensure_host_package("python3-maturin")
20 self.tc.hasHostPackage("nativesdk-python3-maturin")
21 or self.tc.hasHostPackage("python3-maturin-native")
22 ):
23 raise unittest.SkipTest("No python3-maturin package in the SDK")
24 20
25 def test_maturin_list_python(self): 21 def test_maturin_list_python(self):
26 py_major = self._run("python3 -c 'import sys; print(sys.version_info.major)'") 22 out = self._run(r"""python3 -c 'import sys; print(f"{sys.executable}\n{sys.version_info.major}.{sys.version_info.minor}")'""")
27 py_minor = self._run("python3 -c 'import sys; print(sys.version_info.minor)'") 23 executable, version = out.splitlines()
28 python_version = "%s.%s" % (py_major.strip(), py_minor.strip())
29 cmd = "maturin list-python"
30 output = self._run(cmd)
31 self.assertRegex(output, r"^🐍 1 python interpreter found:\n")
32 self.assertRegex(
33 output,
34 r" - CPython %s (.+)/usr/bin/python%s$" % (python_version, python_version),
35 )
36 24
25 output = self._run("maturin list-python")
26 # The output looks like this:
27 # - CPython 3.13 at /usr/bin/python3
28 # We don't want to assume CPython so just check for the version and path.
29 expected = f"{version} at {executable}"
30 self.assertIn(expected, output)
37 31
38class MaturinDevelopTest(OESDKTestCase): 32class MaturinDevelopTest(OESDKTestCase):
39 @classmethod
40 def setUpClass(self):
41 targetdir = os.path.join(self.tc.sdk_dir, "guessing-game")
42 try:
43 shutil.rmtree(targetdir)
44 except FileNotFoundError:
45 pass
46 shutil.copytree(
47 os.path.join(self.tc.files_dir, "maturin/guessing-game"), targetdir
48 )
49
50 def setUp(self): 33 def setUp(self):
51 machine = self.td.get("MACHINE") 34 machine = self.td.get("MACHINE")
52 if not ( 35 self.ensure_host_package("python3-maturin")
53 self.tc.hasHostPackage("nativesdk-python3-maturin") 36
54 or self.tc.hasHostPackage("python3-maturin-native")
55 ):
56 raise unittest.SkipTest("No python3-maturin package in the SDK")
57 if not ( 37 if not (
58 self.tc.hasHostPackage("packagegroup-rust-cross-canadian-%s" % machine) 38 self.tc.hasHostPackage("packagegroup-rust-cross-canadian-%s" % machine)
59 ): 39 ):
@@ -67,9 +47,17 @@ class MaturinDevelopTest(OESDKTestCase):
67 (1) that a .venv can been created. 47 (1) that a .venv can been created.
68 (2) a functional 'rustc' and 'cargo' 48 (2) a functional 'rustc' and 'cargo'
69 """ 49 """
70 self._run("cd %s/guessing-game; python3 -m venv .venv" % self.tc.sdk_dir) 50 targetdir = os.path.join(self.tc.sdk_dir, "guessing-game")
71 cmd = "cd %s/guessing-game; maturin develop" % self.tc.sdk_dir 51 try:
72 output = self._run(cmd) 52 shutil.rmtree(targetdir)
53 except FileNotFoundError:
54 pass
55 shutil.copytree(
56 os.path.join(self.tc.files_dir, "maturin/guessing-game"), targetdir
57 )
58
59 self._run("cd %s; python3 -m venv .venv" % targetdir)
60 output = self._run("cd %s; maturin develop" % targetdir)
73 self.assertRegex(output, r"🔗 Found pyo3 bindings with abi3 support for Python ≥ 3.8") 61 self.assertRegex(output, r"🔗 Found pyo3 bindings with abi3 support for Python ≥ 3.8")
74 self.assertRegex(output, r"🐍 Not using a specific python interpreter") 62 self.assertRegex(output, r"🐍 Not using a specific python interpreter")
75 self.assertRegex(output, r"📡 Using build options features from pyproject.toml") 63 self.assertRegex(output, r"📡 Using build options features from pyproject.toml")
diff --git a/meta/lib/oeqa/sdk/cases/meson.py b/meta/lib/oeqa/sdk/cases/meson.py
index be53df204a..a809ca3a53 100644
--- a/meta/lib/oeqa/sdk/cases/meson.py
+++ b/meta/lib/oeqa/sdk/cases/meson.py
@@ -4,41 +4,69 @@
4# SPDX-License-Identifier: MIT 4# SPDX-License-Identifier: MIT
5# 5#
6 6
7import json
7import os 8import os
8import subprocess 9import subprocess
9import tempfile 10import tempfile
10import unittest 11import unittest
11 12
12from oeqa.sdk.case import OESDKTestCase 13from oeqa.sdk.case import OESDKTestCase
14from oeqa.sdkext.context import OESDKExtTestContext
13from oeqa.utils.subprocesstweak import errors_have_output 15from oeqa.utils.subprocesstweak import errors_have_output
14errors_have_output() 16errors_have_output()
15 17
16class MesonTest(OESDKTestCase): 18class MesonTestBase(OESDKTestCase):
19 def setUp(self):
20 libc = self.td.get("TCLIBC")
21 if libc in [ 'newlib' ]:
22 raise unittest.SkipTest("MesonTest class: SDK doesn't contain a supported C library")
23
24 if isinstance(self.tc, OESDKExtTestContext):
25 self.skipTest(f"{self.id()} does not support eSDK (https://bugzilla.yoctoproject.org/show_bug.cgi?id=15854)")
26
27 self.ensure_host_package("meson")
28 self.ensure_host_package("pkgconfig")
29
30 def build_meson(self, sourcedir, builddir, installdir=None, options=""):
31 """
32 Given a source tree in sourcedir, configure it to build in builddir with
33 the specified options, and if installdir is set also install.
34 """
35 log = self._run(f"meson setup --warnlevel 1 {builddir} {sourcedir} {options}")
36
37 # Check that Meson thinks we're doing a cross build and not a native
38 self.assertIn("Build type: cross build", log)
39
40 # Check that the cross-compiler used is the one we set.
41 data = json.loads(self._run(f"meson introspect --compilers {builddir}"))
42 self.assertIn(self.td.get("CC").split()[0], data["host"]["c"]["exelist"])
43
44 # Check that the target architectures was set correctly.
45 data = json.loads(self._run(f"meson introspect --machines {builddir}"))
46 self.assertEqual(data["host"]["cpu"], self.td["HOST_ARCH"])
47
48 self._run(f"meson compile -C {builddir} -v")
49
50 if installdir:
51 self._run(f"meson install -C {builddir} --destdir {installdir}")
52
53class MesonTest(MesonTestBase):
17 """ 54 """
18 Test that Meson builds correctly. 55 Test that Meson builds correctly.
19 """ 56 """
20 def setUp(self):
21 if not (self.tc.hasHostPackage("nativesdk-meson") or
22 self.tc.hasHostPackage("meson-native")):
23 raise unittest.SkipTest("MesonTest: needs meson")
24 57
25 def test_epoxy(self): 58 def test_epoxy(self):
26 with tempfile.TemporaryDirectory(prefix="epoxy", dir=self.tc.sdk_dir) as testdir: 59 with tempfile.TemporaryDirectory(prefix="epoxy", dir=self.tc.sdk_dir) as testdir:
27 tarball = self.fetch(testdir, self.td["DL_DIR"], "https://github.com/anholt/libepoxy/releases/download/1.5.3/libepoxy-1.5.3.tar.xz") 60 tarball = self.fetch(testdir, self.td["DL_DIR"], "https://github.com/anholt/libepoxy/releases/download/1.5.3/libepoxy-1.5.3.tar.xz")
28 61
29 dirs = {} 62 sourcedir = os.path.join(testdir, "libepoxy-1.5.3")
30 dirs["source"] = os.path.join(testdir, "libepoxy-1.5.3") 63 builddir = os.path.join(testdir, "build")
31 dirs["build"] = os.path.join(testdir, "build") 64 installdir = os.path.join(testdir, "install")
32 dirs["install"] = os.path.join(testdir, "install")
33 65
34 subprocess.check_output(["tar", "xf", tarball, "-C", testdir], stderr=subprocess.STDOUT) 66 subprocess.check_output(["tar", "xf", tarball, "-C", testdir], stderr=subprocess.STDOUT)
35 self.assertTrue(os.path.isdir(dirs["source"])) 67 self.assertTrue(os.path.isdir(sourcedir))
36 os.makedirs(dirs["build"])
37
38 log = self._run("meson --warnlevel 1 -Degl=no -Dglx=no -Dx11=false {build} {source}".format(**dirs))
39 # Check that Meson thinks we're doing a cross build and not a native
40 self.assertIn("Build type: cross build", log)
41 self._run("ninja -C {build} -v".format(**dirs))
42 self._run("DESTDIR={install} ninja -C {build} -v install".format(**dirs))
43 68
44 self.check_elf(os.path.join(dirs["install"], "usr", "local", "lib", "libepoxy.so")) 69 os.makedirs(builddir)
70 self.build_meson(sourcedir, builddir, installdir, "-Degl=no -Dglx=no -Dx11=false")
71 self.assertTrue(os.path.isdir(installdir))
72 self.check_elf(os.path.join(installdir, "usr", "local", "lib", "libepoxy.so"))
diff --git a/meta/lib/oeqa/sdk/cases/perl.py b/meta/lib/oeqa/sdk/cases/perl.py
index 8eab4442e8..a72bd2461a 100644
--- a/meta/lib/oeqa/sdk/cases/perl.py
+++ b/meta/lib/oeqa/sdk/cases/perl.py
@@ -4,7 +4,6 @@
4# SPDX-License-Identifier: MIT 4# SPDX-License-Identifier: MIT
5# 5#
6 6
7import unittest
8from oeqa.sdk.case import OESDKTestCase 7from oeqa.sdk.case import OESDKTestCase
9 8
10from oeqa.utils.subprocesstweak import errors_have_output 9from oeqa.utils.subprocesstweak import errors_have_output
@@ -12,9 +11,7 @@ errors_have_output()
12 11
13class PerlTest(OESDKTestCase): 12class PerlTest(OESDKTestCase):
14 def setUp(self): 13 def setUp(self):
15 if not (self.tc.hasHostPackage("nativesdk-perl") or 14 self.ensure_host_package("perl")
16 self.tc.hasHostPackage("perl-native")):
17 raise unittest.SkipTest("No perl package in the SDK")
18 15
19 def test_perl(self): 16 def test_perl(self):
20 cmd = "perl -e '$_=\"Uryyb, jbeyq\"; tr/a-zA-Z/n-za-mN-ZA-M/;print'" 17 cmd = "perl -e '$_=\"Uryyb, jbeyq\"; tr/a-zA-Z/n-za-mN-ZA-M/;print'"
diff --git a/meta/lib/oeqa/sdk/cases/python.py b/meta/lib/oeqa/sdk/cases/python.py
index 51284949f5..b990cd889a 100644
--- a/meta/lib/oeqa/sdk/cases/python.py
+++ b/meta/lib/oeqa/sdk/cases/python.py
@@ -4,7 +4,6 @@
4# SPDX-License-Identifier: MIT 4# SPDX-License-Identifier: MIT
5# 5#
6 6
7import unittest
8from oeqa.sdk.case import OESDKTestCase 7from oeqa.sdk.case import OESDKTestCase
9 8
10from oeqa.utils.subprocesstweak import errors_have_output 9from oeqa.utils.subprocesstweak import errors_have_output
@@ -12,9 +11,7 @@ errors_have_output()
12 11
13class Python3Test(OESDKTestCase): 12class Python3Test(OESDKTestCase):
14 def setUp(self): 13 def setUp(self):
15 if not (self.tc.hasHostPackage("nativesdk-python3-core") or 14 self.ensure_host_package("python3-core", recipe="python3")
16 self.tc.hasHostPackage("python3-core-native")):
17 raise unittest.SkipTest("No python3 package in the SDK")
18 15
19 def test_python3(self): 16 def test_python3(self):
20 cmd = "python3 -c \"import codecs; print(codecs.encode('Uryyb, jbeyq', 'rot13'))\"" 17 cmd = "python3 -c \"import codecs; print(codecs.encode('Uryyb, jbeyq', 'rot13'))\""
diff --git a/meta/lib/oeqa/sdk/cases/rust.py b/meta/lib/oeqa/sdk/cases/rust.py
index a54245851b..4b115bebf5 100644
--- a/meta/lib/oeqa/sdk/cases/rust.py
+++ b/meta/lib/oeqa/sdk/cases/rust.py
@@ -31,6 +31,7 @@ class RustCompileTest(OESDKTestCase):
31 raise unittest.SkipTest("RustCompileTest class: SDK doesn't contain a Rust cross-canadian toolchain") 31 raise unittest.SkipTest("RustCompileTest class: SDK doesn't contain a Rust cross-canadian toolchain")
32 32
33 def test_cargo_build(self): 33 def test_cargo_build(self):
34 self._run('cd %s/hello; cargo add zstd' % (self.tc.sdk_dir))
34 self._run('cd %s/hello; cargo build' % self.tc.sdk_dir) 35 self._run('cd %s/hello; cargo build' % self.tc.sdk_dir)
35 36
36class RustHostCompileTest(OESDKTestCase): 37class RustHostCompileTest(OESDKTestCase):
@@ -52,5 +53,6 @@ class RustHostCompileTest(OESDKTestCase):
52 53
53 def test_cargo_build(self): 54 def test_cargo_build(self):
54 sdksys = self.td.get("SDK_SYS") 55 sdksys = self.td.get("SDK_SYS")
56 self._run('cd %s/hello; cargo add zstd' % (self.tc.sdk_dir))
55 self._run('cd %s/hello; cargo build --target %s-gnu' % (self.tc.sdk_dir, sdksys)) 57 self._run('cd %s/hello; cargo build --target %s-gnu' % (self.tc.sdk_dir, sdksys))
56 self._run('cd %s/hello; cargo run --target %s-gnu' % (self.tc.sdk_dir, sdksys)) 58 self._run('cd %s/hello; cargo run --target %s-gnu' % (self.tc.sdk_dir, sdksys))