diff options
Diffstat (limited to 'meta/lib/oeqa/sdk/cases')
-rw-r--r-- | meta/lib/oeqa/sdk/cases/autotools.py | 16 | ||||
-rw-r--r-- | meta/lib/oeqa/sdk/cases/cmake.py | 8 | ||||
-rw-r--r-- | meta/lib/oeqa/sdk/cases/gcc.py | 4 | ||||
-rw-r--r-- | meta/lib/oeqa/sdk/cases/gtk3.py | 48 | ||||
-rw-r--r-- | meta/lib/oeqa/sdk/cases/kmod.py | 39 | ||||
-rw-r--r-- | meta/lib/oeqa/sdk/cases/makefile.py | 6 | ||||
-rw-r--r-- | meta/lib/oeqa/sdk/cases/manifest.py | 26 | ||||
-rw-r--r-- | meta/lib/oeqa/sdk/cases/maturin.py | 56 | ||||
-rw-r--r-- | meta/lib/oeqa/sdk/cases/meson.py | 64 | ||||
-rw-r--r-- | meta/lib/oeqa/sdk/cases/perl.py | 5 | ||||
-rw-r--r-- | meta/lib/oeqa/sdk/cases/python.py | 5 | ||||
-rw-r--r-- | meta/lib/oeqa/sdk/cases/rust.py | 2 |
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 @@ | |||
7 | import os | 7 | import os |
8 | import tempfile | 8 | import tempfile |
9 | import subprocess | 9 | import subprocess |
10 | import unittest | ||
10 | 11 | ||
11 | from oeqa.sdk.case import OESDKTestCase | 12 | from oeqa.sdk.case import OESDKTestCase |
12 | from oeqa.utils.subprocesstweak import errors_have_output | 13 | from 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 @@ | |||
7 | import os | 7 | import os |
8 | import subprocess | 8 | import subprocess |
9 | import tempfile | 9 | import tempfile |
10 | import unittest | ||
11 | 10 | ||
12 | from oeqa.sdk.case import OESDKTestCase | 11 | from oeqa.sdk.cases.meson import MesonTestBase |
12 | |||
13 | from oeqa.utils.subprocesstweak import errors_have_output | 13 | from oeqa.utils.subprocesstweak import errors_have_output |
14 | errors_have_output() | 14 | errors_have_output() |
15 | 15 | ||
16 | class GTK3Test(OESDKTestCase): | 16 | class 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 | |||
7 | import os | ||
8 | import subprocess | ||
9 | import tempfile | ||
10 | |||
11 | from oeqa.sdk.case import OESDKTestCase | ||
12 | from oeqa.sdkext.context import OESDKExtTestContext | ||
13 | from oeqa.utils.subprocesstweak import errors_have_output | ||
14 | errors_have_output() | ||
15 | |||
16 | class 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 | ||
7 | import os, tempfile, subprocess | 7 | import os, tempfile, subprocess |
8 | import unittest | ||
8 | from oeqa.sdk.case import OESDKTestCase | 9 | from oeqa.sdk.case import OESDKTestCase |
9 | from oeqa.utils.subprocesstweak import errors_have_output | 10 | from oeqa.utils.subprocesstweak import errors_have_output |
10 | errors_have_output() | 11 | errors_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 | |||
7 | from oeqa.sdk.case import OESDKTestCase | ||
8 | from oeqa.sdkext.context import OESDKExtTestContext | ||
9 | |||
10 | |||
11 | class 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 | ||
17 | class MaturinTest(OESDKTestCase): | 17 | class 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 | ||
38 | class MaturinDevelopTest(OESDKTestCase): | 32 | class 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 | ||
7 | import json | ||
7 | import os | 8 | import os |
8 | import subprocess | 9 | import subprocess |
9 | import tempfile | 10 | import tempfile |
10 | import unittest | 11 | import unittest |
11 | 12 | ||
12 | from oeqa.sdk.case import OESDKTestCase | 13 | from oeqa.sdk.case import OESDKTestCase |
14 | from oeqa.sdkext.context import OESDKExtTestContext | ||
13 | from oeqa.utils.subprocesstweak import errors_have_output | 15 | from oeqa.utils.subprocesstweak import errors_have_output |
14 | errors_have_output() | 16 | errors_have_output() |
15 | 17 | ||
16 | class MesonTest(OESDKTestCase): | 18 | class 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 | |||
53 | class 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 | ||
7 | import unittest | ||
8 | from oeqa.sdk.case import OESDKTestCase | 7 | from oeqa.sdk.case import OESDKTestCase |
9 | 8 | ||
10 | from oeqa.utils.subprocesstweak import errors_have_output | 9 | from oeqa.utils.subprocesstweak import errors_have_output |
@@ -12,9 +11,7 @@ errors_have_output() | |||
12 | 11 | ||
13 | class PerlTest(OESDKTestCase): | 12 | class 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 | ||
7 | import unittest | ||
8 | from oeqa.sdk.case import OESDKTestCase | 7 | from oeqa.sdk.case import OESDKTestCase |
9 | 8 | ||
10 | from oeqa.utils.subprocesstweak import errors_have_output | 9 | from oeqa.utils.subprocesstweak import errors_have_output |
@@ -12,9 +11,7 @@ errors_have_output() | |||
12 | 11 | ||
13 | class Python3Test(OESDKTestCase): | 12 | class 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 | ||
36 | class RustHostCompileTest(OESDKTestCase): | 37 | class 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)) |