summaryrefslogtreecommitdiff
path: root/poky
diff options
context:
space:
mode:
authorPatrick Williams <patrick@stwcx.xyz>2022-04-02 16:58:32 +0300
committerPatrick Williams <patrick@stwcx.xyz>2022-04-04 20:54:11 +0300
commit45852739b8823d99a818e714b72961886759fe2e (patch)
tree92fc4d26b025440bff29a7b0cbf204c7f5cca151 /poky
parente9c4c65544ebd9f2c5772936c9fe0552d5e6d5b0 (diff)
downloadopenbmc-45852739b8823d99a818e714b72961886759fe2e.tar.xz
subtree updates
meta-openembedded: 9a52bfc4a6..af11f6ce73: Andreas Müller (4): nautilus: Add a packageconfig for libportal - disabled by default gtk4: upgrade 4.4.0 -> 4.6.2 libadwaita: initial add 1.1.0 gtksourceview5: upgrade 5.2.0 -> 5.4.0 Carlos Rafael Giani (3): libopenmpt: Remove unnecessary python code block pipewire: Upgrade to version 0.3.49 wireplumber: Upgrade to version 0.4.9 Kai Kang (4): wxwidgets: 3.1.4 -> 3.1.5 python3-wxgtk4: add recipe wxwidgets: fix typo mcelog: fix compile error Khem Raj (1): python3-wxgtk4: Use cross prefix with native wx-config Matthias Klein (1): paho-mqtt-c: upgrade 1.3.9 -> 1.3.10 Mingli Yu (1): mariadb: increase MY_AES_CTX_SIZE Potin Lai (4): libimobiledevice-glue: add recipe libimobiledevice-glue: fix undefined bswap error libirecovery: add recipe idevicerestore: add recipe S. Lockwood-Childs (1): python3-evdev: fix host header contamination Yi Zhao (2): strongswan: 5.9.4 -> 5.9.5 libnetfilter-conntrack: upgrade 1.0.8 -> 1.0.9 meta-raspberrypi: c06ae5eacf..31c33d155c: Khem Raj (3): linux-raspberrypi_5.15.bb: Upgrade to 5.15.32 raspberrypi-firmware: Update to match 5.15.32 armstubs: Upgrade to 20211101 poky: 5fe3689f4f..1976521190: Chen Qi (1): gobject-introspection: fix default search path for girdir Daniel Ammann (2): overview-manual: Fix reference ref-manual: Add vfat in list of filesystems supported by kickstart Jagadeesh Krishnanjanappa (1): cmake: support to create per-toolchain cmake file in SDK Khem Raj (2): weston: Add a knob to control simple clients meson: Robustify compiler detection logic Marta Rybczynska (1): doc: migration-3.5: extend the section on inclusive language Michael Halstead (1): releases: update to include 3.4.3 Michael Opdenacker (4): overview-manual: add missing upper case docs: add poky.yaml and sphinx-static/switchers.js to "make clean" manuals: fix quoting of double dashes migration-guides: preliminary description for 3.5 Oleksandr Kravchuk (1): python3: update to 3.10.4 Peter Kjellerstedt (1): ref-manual: Remove references to AVAILABLE_LICENSES Rasmus Villemoes (1): git: make expat and curl into PACKAGECONFIG items Richard Purdie (11): set_versions/switchers: Drop versions shown to the active releases mirrors: Add missing gitsm entries for yocto/oe mirrors base: Don't add duplicates to sys.path base: Clean up module import compatibility code modutils-initscripts: Change license PD -> MIT keymaps: Clean up license handling initscripts: Clean up license handling/identifiers bitbake: cooker: Further fixes to inotify to fix memres bitbake issues bitbake: cooker: Restore sys.path and sys.modules between parses bitbake: cooker: Ensure any existing hashserv connection is closed bitbake: cooker: Avoid error if siggen wasn't setup Ross Burton (24): ref-manual: update Python class documentation buildtools-tarball: include nativesdk-python3-pyyaml image_types: hddimg and iso only work on x86 oeqa/selftest/devtool: ensure Git username is set before upgrade tests oeqa/selftest/wic: use os.rename instead of bb.utils.rename oeqa/selftest/wic: remove redundant asserts oeqa/selftest/wic: clean up only_for_arch decorator oeqa/selftest/wic: don't hardcode kernel image type in test_wic_rm oeqa/selftest/wic: add more arch-specific annotations oeqa/selftest/buildoptions: set PACKAGE_CLASSES in test_arch_work_dir_and_export_source oeqa/runtime/decorator/package.py: remove use of strToSet oeqa/core/decorator: remove redundant code testimage: inline updateTestData() oeqa/core/utils/misc: remove redundant file oeqa/selftest: remove unused imports oeqa/core/decorators/data: improve has_* logic oeqa/selftest: tag tests that use runqemu oeqa: rationalise skipifqemu decorators oeqa/selftest/oescripts: refactor skipping logic oeqa/selftest/wic: cleanup WicTestCase.setUpLocal oeqa/selftest/wic: rearrange tests oeqa/selftest/wic: use os.path.join to join paths oeqa/selftest/wic: use self.td instead of get_bb_var to save on bitbake calls oeqa/selftest: generalise test_devtool_virtual_kernel_modify Simon Kuhnle (1): convert-variable-renames: Fix typo in description Signed-off-by: Patrick Williams <patrick@stwcx.xyz> Change-Id: Ic8359fe5772351a45a3154c6a7f5042a88ff934c
Diffstat (limited to 'poky')
-rw-r--r--poky/bitbake/lib/bb/cooker.py25
-rw-r--r--poky/documentation/Makefile2
-rw-r--r--poky/documentation/migration-guides/migration-2.1.rst6
-rw-r--r--poky/documentation/migration-guides/migration-2.3.rst2
-rw-r--r--poky/documentation/migration-guides/migration-3.1.rst2
-rw-r--r--poky/documentation/migration-guides/migration-3.5.rst96
-rw-r--r--poky/documentation/migration-guides/release-notes-3.4.rst6
-rw-r--r--poky/documentation/overview-manual/development-environment.rst6
-rw-r--r--poky/documentation/overview-manual/yp-intro.rst2
-rw-r--r--poky/documentation/poky.yaml.in6
-rw-r--r--poky/documentation/profile-manual/usage.rst2
-rw-r--r--poky/documentation/ref-manual/classes.rst71
-rw-r--r--poky/documentation/ref-manual/kickstart.rst2
-rw-r--r--poky/documentation/ref-manual/tasks.rst4
-rw-r--r--poky/documentation/ref-manual/variables.rst37
-rw-r--r--poky/documentation/releases.rst1
-rwxr-xr-xpoky/documentation/set_versions.py2
-rw-r--r--poky/documentation/toaster-manual/setup-and-use.rst2
-rw-r--r--poky/meta/classes/base.bbclass15
-rw-r--r--poky/meta/classes/image_types.bbclass5
-rw-r--r--poky/meta/classes/mirrors.bbclass2
-rw-r--r--poky/meta/classes/testimage.bbclass4
-rw-r--r--poky/meta/classes/toolchain-scripts.bbclass1
-rw-r--r--poky/meta/lib/oeqa/core/decorator/__init__.py11
-rw-r--r--poky/meta/lib/oeqa/core/decorator/data.py50
-rw-r--r--poky/meta/lib/oeqa/core/utils/misc.py47
-rw-r--r--poky/meta/lib/oeqa/runtime/cases/boot.py2
-rw-r--r--poky/meta/lib/oeqa/runtime/cases/ethernet_ip_connman.py3
-rw-r--r--poky/meta/lib/oeqa/runtime/cases/ltp_stress.py3
-rw-r--r--poky/meta/lib/oeqa/runtime/cases/storage.py16
-rw-r--r--poky/meta/lib/oeqa/runtime/cases/suspend.py2
-rw-r--r--poky/meta/lib/oeqa/runtime/cases/usb_hid.py2
-rw-r--r--poky/meta/lib/oeqa/runtime/decorator/package.py9
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/_sstatetests_noauto.py2
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/binutils.py5
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/buildoptions.py9
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/devtool.py49
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/distrodata.py3
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/eSDK.py2
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/fitimage.py3
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/gcc.py9
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/glibc.py3
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/imagefeatures.py3
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/layerappend.py2
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/lic_checksum.py1
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/manifest.py2
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/oescripts.py16
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/overlayfs.py6
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/package.py1
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/recipeutils.py6
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/reproducible.py2
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/runqemu.py2
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/runtime_test.py13
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/selftest.py1
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/sstate.py5
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/sstatetests.py3
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/sysroot.py2
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/tinfoil.py1
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/wic.py338
-rw-r--r--poky/meta/recipes-bsp/keymaps/files/GPLv2.patch347
-rwxr-xr-xpoky/meta/recipes-bsp/keymaps/files/keymap.sh3
-rw-r--r--poky/meta/recipes-bsp/keymaps/keymaps_1.0.bb5
-rw-r--r--poky/meta/recipes-core/initscripts/initscripts-1.0/GPLv2.patch347
-rw-r--r--poky/meta/recipes-core/initscripts/initscripts-1.0/alignment.sh4
-rw-r--r--poky/meta/recipes-core/initscripts/initscripts-1.0/banner.sh4
-rwxr-xr-xpoky/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh4
-rwxr-xr-xpoky/meta/recipes-core/initscripts/initscripts-1.0/checkfs.sh4
-rwxr-xr-xpoky/meta/recipes-core/initscripts/initscripts-1.0/checkroot.sh4
-rwxr-xr-xpoky/meta/recipes-core/initscripts/initscripts-1.0/devpts.sh4
-rwxr-xr-xpoky/meta/recipes-core/initscripts/initscripts-1.0/dmesg.sh4
-rwxr-xr-xpoky/meta/recipes-core/initscripts/initscripts-1.0/functions3
-rwxr-xr-xpoky/meta/recipes-core/initscripts/initscripts-1.0/halt4
-rwxr-xr-xpoky/meta/recipes-core/initscripts/initscripts-1.0/hostname.sh4
-rwxr-xr-xpoky/meta/recipes-core/initscripts/initscripts-1.0/mountall.sh4
-rwxr-xr-xpoky/meta/recipes-core/initscripts/initscripts-1.0/mountnfs.sh4
-rwxr-xr-xpoky/meta/recipes-core/initscripts/initscripts-1.0/populate-volatile.sh4
-rw-r--r--poky/meta/recipes-core/initscripts/initscripts-1.0/read-only-rootfs-hook.sh3
-rwxr-xr-xpoky/meta/recipes-core/initscripts/initscripts-1.0/reboot4
-rwxr-xr-xpoky/meta/recipes-core/initscripts/initscripts-1.0/rmnologin.sh4
-rw-r--r--poky/meta/recipes-core/initscripts/initscripts-1.0/save-rtc.sh4
-rwxr-xr-xpoky/meta/recipes-core/initscripts/initscripts-1.0/sendsigs4
-rwxr-xr-xpoky/meta/recipes-core/initscripts/initscripts-1.0/single4
-rw-r--r--poky/meta/recipes-core/initscripts/initscripts-1.0/sushell3
-rw-r--r--poky/meta/recipes-core/initscripts/initscripts-1.0/sysfs.sh4
-rwxr-xr-xpoky/meta/recipes-core/initscripts/initscripts-1.0/umountfs4
-rwxr-xr-xpoky/meta/recipes-core/initscripts/initscripts-1.0/umountnfs.sh4
-rwxr-xr-xpoky/meta/recipes-core/initscripts/initscripts-1.0/urandom4
-rw-r--r--poky/meta/recipes-core/initscripts/initscripts_1.0.bb3
-rw-r--r--poky/meta/recipes-core/meta/buildtools-tarball.bb5
-rw-r--r--poky/meta/recipes-devtools/cmake/cmake/SDKToolchainConfig.cmake.template31
-rwxr-xr-xpoky/meta/recipes-devtools/cmake/cmake/cmake-setup.py33
-rw-r--r--poky/meta/recipes-devtools/cmake/cmake_3.22.3.bb7
-rw-r--r--poky/meta/recipes-devtools/git/git_2.35.1.bb6
-rw-r--r--poky/meta/recipes-devtools/meson/meson/0001-Check-for-clang-before-guessing-gcc-or-lcc.patch56
-rw-r--r--poky/meta/recipes-devtools/meson/meson_0.61.3.bb1
-rw-r--r--poky/meta/recipes-devtools/python/python3_3.10.4.bb (renamed from poky/meta/recipes-devtools/python/python3_3.10.3.bb)2
-rw-r--r--poky/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-g-ir-tool-template.in-fix-girdir-path.patch33
-rw-r--r--poky/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.72.0.bb4
-rw-r--r--poky/meta/recipes-graphics/wayland/weston_10.0.0.bb5
-rw-r--r--poky/meta/recipes-kernel/modutils-initscripts/files/PD.patch8
-rwxr-xr-xpoky/meta/recipes-kernel/modutils-initscripts/files/modutils.sh4
-rw-r--r--poky/meta/recipes-kernel/modutils-initscripts/modutils-initscripts.bb7
-rwxr-xr-xpoky/scripts/contrib/convert-variable-renames.py2
103 files changed, 764 insertions, 1173 deletions
diff --git a/poky/bitbake/lib/bb/cooker.py b/poky/bitbake/lib/bb/cooker.py
index f435b18c87..df4acca18a 100644
--- a/poky/bitbake/lib/bb/cooker.py
+++ b/poky/bitbake/lib/bb/cooker.py
@@ -159,6 +159,9 @@ class BBCooker:
for f in featureSet:
self.featureset.setFeature(f)
+ self.orig_syspath = sys.path.copy()
+ self.orig_sysmodules = [*sys.modules]
+
self.configuration = bb.cookerdata.CookerConfiguration()
self.idleCallBackRegister = idleCallBackRegister
@@ -254,9 +257,14 @@ class BBCooker:
if not event.pathname in self.configwatcher.bbwatchedfiles:
return
if "IN_ISDIR" in event.maskname:
+ if "IN_CREATE" in event.maskname or "IN_DELETE" in event.maskname:
+ if event.pathname in self.configwatcher.bbseen:
+ self.configwatcher.bbseen.remove(event.pathname)
+ # Could remove all entries starting with the directory but for now...
+ bb.parse.clear_cache()
if "IN_CREATE" in event.maskname:
self.add_filewatch([[event.pathname]], watcher=self.configwatcher, dirs=True)
- elif "IN_DELETE" in event.maskname and event.pathname in self.watcher.bbseen:
+ elif "IN_DELETE" in event.maskname and event.pathname in self.configwatcher.bbseen:
self.configwatcher.bbseen.remove(event.pathname)
if not event.pathname in self.inotify_modified_files:
self.inotify_modified_files.append(event.pathname)
@@ -272,6 +280,11 @@ class BBCooker:
or event.pathname.endswith("bitbake.lock"):
return
if "IN_ISDIR" in event.maskname:
+ if "IN_CREATE" in event.maskname or "IN_DELETE" in event.maskname:
+ if event.pathname in self.watcher.bbseen:
+ self.watcher.bbseen.remove(event.pathname)
+ # Could remove all entries starting with the directory but for now...
+ bb.parse.clear_cache()
if "IN_CREATE" in event.maskname:
self.add_filewatch([[event.pathname]], dirs=True)
elif "IN_DELETE" in event.maskname and event.pathname in self.watcher.bbseen:
@@ -340,6 +353,11 @@ class BBCooker:
self.state = state.initial
self.caches_array = []
+ sys.path = self.orig_syspath.copy()
+ for mod in [*sys.modules]:
+ if mod not in self.orig_sysmodules:
+ del sys.modules[mod]
+
# Need to preserve BB_CONSOLELOG over resets
consolelog = None
if hasattr(self, "data"):
@@ -1727,7 +1745,8 @@ class BBCooker:
def post_serve(self):
self.shutdown(force=True)
prserv.serv.auto_shutdown()
- bb.parse.siggen.exit()
+ if hasattr(bb.parse, "siggen"):
+ bb.parse.siggen.exit()
if self.hashserv:
self.hashserv.process.terminate()
self.hashserv.process.join()
@@ -1748,6 +1767,8 @@ class BBCooker:
self.state = state.initial
def reset(self):
+ if hasattr(bb.parse, "siggen"):
+ bb.parse.siggen.exit()
self.initConfigurationData()
self.handlePRServ()
diff --git a/poky/documentation/Makefile b/poky/documentation/Makefile
index bec53399c0..33bbca0bab 100644
--- a/poky/documentation/Makefile
+++ b/poky/documentation/Makefile
@@ -44,7 +44,7 @@ PNGs := $(foreach dir, $(IMAGEDIRS), $(patsubst %.svg,%.png,$(wildcard $(SOURCED
$(SVG2PNG) --export-filename=$@ $<
clean:
- @rm -rf $(BUILDDIR) $(PNGs) $(PDFs)
+ @rm -rf $(BUILDDIR) $(PNGs) $(PDFs) poky.yaml sphinx-static/switchers.js
epub: $(PNGs)
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/poky/documentation/migration-guides/migration-2.1.rst b/poky/documentation/migration-guides/migration-2.1.rst
index eb29694bb5..ae6268d509 100644
--- a/poky/documentation/migration-guides/migration-2.1.rst
+++ b/poky/documentation/migration-guides/migration-2.1.rst
@@ -281,7 +281,7 @@ The following changes have been made for the Poky distribution:
using the Poky distribution can easily include to enable the same
functionality.
- Any recipe that needs to opt-out of having the "--disable-static"
+ Any recipe that needs to opt-out of having the ``--disable-static``
option specified on the configure command line either because it is
not a supported option for the configure script or because static
libraries are needed should set the following variable::
@@ -384,9 +384,9 @@ These additional changes exist:
- The
:ref:`devtool modify <sdk-manual/extensible:use \`\`devtool modify\`\` to modify the source of an existing component>`
command now defaults to extracting the source since that is most
- commonly expected. The "-x" or "--extract" options are now no-ops. If
+ commonly expected. The ``-x`` or ``--extract`` options are now no-ops. If
you wish to provide your own existing source tree, you will now need
- to specify either the "-n" or "--no-extract" options when running
+ to specify either the ``-n`` or ``--no-extract`` options when running
``devtool modify``.
- If the formfactor for a machine is either not supplied or does not
diff --git a/poky/documentation/migration-guides/migration-2.3.rst b/poky/documentation/migration-guides/migration-2.3.rst
index 59271abbc0..d49ed474ca 100644
--- a/poky/documentation/migration-guides/migration-2.3.rst
+++ b/poky/documentation/migration-guides/migration-2.3.rst
@@ -370,7 +370,7 @@ The following changes have been made to Wic:
now the current directory by default instead of the unusual
``/var/tmp/wic``.
- The "-o" and "--outdir" options remain unchanged and are used to
+ The ``-o`` and ``--outdir`` options remain unchanged and are used to
specify your preferred output directory if you do not want to use the
default directory.
diff --git a/poky/documentation/migration-guides/migration-3.1.rst b/poky/documentation/migration-guides/migration-3.1.rst
index cb0296717e..e3fdbbe425 100644
--- a/poky/documentation/migration-guides/migration-3.1.rst
+++ b/poky/documentation/migration-guides/migration-3.1.rst
@@ -260,7 +260,7 @@ Miscellaneous changes
---------------------
- The undocumented ``SRC_DISTRIBUTE_LICENSES`` variable has now been
- removed in favour of a new :term:`AVAILABLE_LICENSES` variable which is
+ removed in favour of a new ``AVAILABLE_LICENSES`` variable which is
dynamically set based upon license files found in
``${COMMON_LICENSE_DIR}`` and ``${LICENSE_PATH}``.
diff --git a/poky/documentation/migration-guides/migration-3.5.rst b/poky/documentation/migration-guides/migration-3.5.rst
index 8ce2306e42..8a4c568743 100644
--- a/poky/documentation/migration-guides/migration-3.5.rst
+++ b/poky/documentation/migration-guides/migration-3.5.rst
@@ -12,10 +12,50 @@ Recipe changes
deleted. BitBake will stop with an error when renamed or removed variables
still exist in your recipes or configuration.
+ Please note that the change applies also to environmental variables, so
+ make sure you use a fresh environment for your build.
+
+ The following variables have changed their names:
+
+ - ``BB_ENV_WHITELIST`` became :term:`BB_ENV_PASSTHROUGH`
+ - ``BB_ENV_EXTRAWHITE`` became :term:`BB_ENV_PASSTHROUGH_ADDITIONS`
+ - ``BB_HASHBASE_WHITELIST`` became :term:`BB_BASEHASH_IGNORE_VARS`
+ - ``BB_HASHCONFIG_WHITELIST`` became :term:`BB_HASHCONFIG_IGNORE_VARS`
+ - ``BB_HASHTASK_WHITELIST`` became ``BB_TASKHASH_IGNORE_TASKS``
+ - ``BB_SETSCENE_ENFORCE_WHITELIST`` became ``BB_SETSCENE_ENFORCE_IGNORE_TASKS``
+ - ``CVE_CHECK_PN_WHITELIST`` became :term:`CVE_CHECK_SKIP_RECIPE`
+ - ``CVE_CHECK_WHITELIST`` became :term:`CVE_CHECK_IGNORE`
+ - ``ICECC_USER_CLASS_BL`` became :term:`ICECC_CLASS_DISABLE`
+ - ``ICECC_SYSTEM_CLASS_BL`` became :term:`ICECC_CLASS_DISABLE`
+ - ``ICECC_USER_PACKAGE_WL`` became :term:`ICECC_RECIPE_ENABLE`
+ - ``ICECC_USER_PACKAGE_BL`` became :term:`ICECC_RECIPE_DISABLE`
+ - ``ICECC_SYSTEM_PACKAGE_BL`` became :term:`ICECC_RECIPE_DISABLE`
+ - ``LICENSE_FLAGS_WHITELIST`` became :term:`LICENSE_FLAGS_ACCEPTED`
+ - ``MULTI_PROVIDER_WHITELIST`` became :term:`BB_MULTI_PROVIDER_ALLOWED`
+ - ``PNBLACKLIST`` became :term:`SKIP_RECIPE`
+ - ``SDK_LOCAL_CONF_BLACKLIST`` became :term:`ESDK_LOCALCONF_REMOVE`
+ - ``SDK_LOCAL_CONF_WHITELIST`` became :term:`ESDK_LOCALCONF_ALLOW`
+ - ``SDK_INHERIT_BLACKLIST`` became :term:`ESDK_CLASS_INHERIT_DISABLE`
+ - ``SSTATE_DUPWHITELIST`` became ``SSTATE_ALLOW_OVERLAP_FILES``
+ - ``SYSROOT_DIRS_BLACKLIST`` became :term:`SYSROOT_DIRS_IGNORE`
+ - ``UNKNOWN_CONFIGURE_WHITELIST`` became :term:`UNKNOWN_CONFIGURE_OPT_IGNORE`
+
+ In addition, ``BB_STAMP_WHITELIST``, ``BB_STAMP_POLICY``, ``INHERIT_BLACKLIST``
+ and ``TUNEABI_WHITELIST`` have been removed.
+
+ Many internal variable names have been also renamed accordingly.
+
+ In addition, in the ``cve-check`` output, the CVE issue status ``Whitelisted``
+ has been renamed to ``Ignored``.
+
A :oe_git:`convert-variable-renames.py
</openembedded-core/tree/scripts/contrib/convert-variable-renames.py>`
script is provided to convert your recipes and configuration,
- and also warns you about the use of problematic words.
+ and also warns you about the use of problematic words. The script performs
+ changes and you need to review them before committing. An example warning
+ looks like::
+
+ poky/scripts/lib/devtool/upgrade.py needs further work at line 275 since it contains abort
- Because of the uncertainty in future default branch names in git repositories,
it is now required to add a branch name to all URLs described
@@ -64,10 +104,17 @@ Recipe changes
- :ref:`allarch <ref-classes-allarch>` packagegroups can no longer depend on packages
which use :term:`PKG` renaming such as :ref:`ref-classes-debian`.
+- :term:`LICENSE` definitions now have to use `SPDX identifiers <https://spdx.org/licenses/>`__.
+ A :oe_git:`convert-spdx-licenses.py </openembedded-core/tree/scripts/contrib/convert-spdx-licenses.py>`
+ script can be used to update your recipes.
+
+- :term:`SRC_URI`: a new :ref:`bitbake:bitbake-user-manual/bitbake-user-manual-fetching:crate fetcher (\`\`crate://\`\`)`
+ is available for Rust packages.
+
Class changes
-------------
-- The `distutils*.bbclasses` have been moved to `meta-python`. The classes and
+- The ``distutils*.bbclasses`` have been moved to ``meta-python``. The classes and
`DISTUTILS*` variables have been removed from the documentation.
- ``blacklist.bbclass`` is removed and the functionality moved to the
@@ -76,3 +123,48 @@ Class changes
function. The usage will remain the same::
SKIP_RECIPE[my-recipe] = "Reason for skipping recipe"
+
+- The Python package build process based on `wheels <https://pythonwheels.com/>`__.
+ Here are the new Python packaging classes that should be used:
+ :ref:`python-flit_core <ref-classes-python_flit_core>`,
+ :ref:`setuptools_python-build_meta <ref-classes-python_setuptools_build_meta>`
+ and :ref:`python_poetry_core <ref-classes-python_poetry_core>`.
+
+- ``image-prelink.bbclass`` class is removed.
+
+- New :ref:`overlayfs <ref-classes-overlayfs>` and
+ :ref:`overlayfs-etc <ref-classes-overlayfs-etc>` classes are available
+ to make it easier to overlay read-only filesystems (for example)
+ with `OverlayFS <https://en.wikipedia.org/wiki/OverlayFS>`__.
+
+Configuration changes
+---------------------
+
+- The Yocto Project now allows to reuse Shared State from its autobuilder.
+ If the network connection between our server and your machine is faster
+ than you would build recipes, you can try to speed up your builds
+ by using such Share State and Hash Equivalence by setting::
+
+ BB_SIGNATURE_HANDLER = "OEEquivHash"
+ BB_HASHSERVE = "auto"
+ BB_HASHSERVE_UPSTREAM = "typhoon.yocto.io:8687"
+ SSTATE_MIRRORS ?= "file://.* https://sstate.yoctoproject.org/&YOCTO_DOC_VERSION;/PATH;downloadfilename=PATH"
+
+Supported host distribution changes
+-----------------------------------
+
+- New support for `AlmaLinux <https://en.wikipedia.org/wiki/AlmaLinux>`__
+ hosts replacing `CentOS <https://en.wikipedia.org/wiki/CentOS>`__.
+ The following distribution versions were dropped: CentOS 8, Ubuntu 16.04 and Fedora 30, 31 and 32.
+
+Changes for release notes
+-------------------------
+
+- Share State cache: now using `ZStandard (zstd) <https://en.wikipedia.org/wiki/Zstd>`__
+ instead of Gzip compression, for better performance.
+
+- BitBake has an improved ``setscene`` task display.
+
+- This release fixes the reproducibility issues with ``rust-llvm`` and ``golang``.
+ Recipes in OpenEmbedded-Core are now fully reproducible.
+
diff --git a/poky/documentation/migration-guides/release-notes-3.4.rst b/poky/documentation/migration-guides/release-notes-3.4.rst
index 927de6dc0c..5a8fb4b5a9 100644
--- a/poky/documentation/migration-guides/release-notes-3.4.rst
+++ b/poky/documentation/migration-guides/release-notes-3.4.rst
@@ -60,8 +60,8 @@ New Features / Enhancements in 3.4
- wic enhancements:
- Added erofs filesystem support
- - Added --extra-space argument to leave extra space after last partition
- - Added --no-fstab-update part option to allow using the stock fstab
+ - Added ``--extra-space argument`` to leave extra space after last partition
+ - Added ``--no-fstab-update`` part option to allow using the stock fstab
- bootimg-efi: added Unified Kernel Image option
- bootimg-pcbios: use label provided when formatting a DOS partition
@@ -75,7 +75,7 @@ New Features / Enhancements in 3.4
- BitBake enhancements:
- New bitbake-getvar helper command to query a variable value (with history)
- - bitbake-layers: layerindex-fetch: add --fetchdir parameter
+ - bitbake-layers: layerindex-fetch: add ``--fetchdir`` parameter
- bitbake-layers: show-recipes: add skip reason to output
- bitbake-diffsigs: sort diff output for consistency
- Allow setting upstream for local hash equivalence server
diff --git a/poky/documentation/overview-manual/development-environment.rst b/poky/documentation/overview-manual/development-environment.rst
index 9c9c8e87a0..19095fc116 100644
--- a/poky/documentation/overview-manual/development-environment.rst
+++ b/poky/documentation/overview-manual/development-environment.rst
@@ -427,7 +427,7 @@ other branches represent offshoots of the "master" branch.
When you create a local copy of a Git repository, the copy has the same
set of branches as the original. This means you can use Git to create a
local working area (also called a branch) that tracks a specific
-development branch from the upstream source Git repository. in other
+development branch from the upstream source Git repository. In other
words, you can define your local Git environment to work on any
development branch in the repository. To help illustrate, consider the
following example Git commands::
@@ -550,11 +550,11 @@ descriptions and strategies on how to use these commands:
You need to be in a local branch other than the one you are deleting
in order to delete branch-name.
-- *git pull --rebase:* Retrieves information from an upstream Git
+- *git pull \-\-rebase*: Retrieves information from an upstream Git
repository and places it in your local Git repository. You use this
command to make sure you are synchronized with the repository from
which you are basing changes (e.g. the "&DISTRO_NAME_NO_CAP;"
- branch). The "--rebase" option ensures that any local commits you
+ branch). The ``--rebase`` option ensures that any local commits you
have in your branch are preserved at the top of your local branch.
- *git push repo-name local-branch:upstream-branch:* Sends
diff --git a/poky/documentation/overview-manual/yp-intro.rst b/poky/documentation/overview-manual/yp-intro.rst
index a863a7d16e..86a8bf2b0d 100644
--- a/poky/documentation/overview-manual/yp-intro.rst
+++ b/poky/documentation/overview-manual/yp-intro.rst
@@ -151,7 +151,7 @@ Here are challenges you might encounter when developing using the Yocto Project:
":ref:`transitioning-to-a-custom-environment:transitioning to a custom environment for systems development`"
documents on the Yocto Project website.
-- *Project Workflow Could Be Confusing:* The `Yocto Project
+- *Project Workflow Could Be Confusing:* The :ref:`Yocto Project
workflow <overview-manual/development-environment:the yocto project development environment>`
could be confusing if you are used to traditional desktop and server
software development.
diff --git a/poky/documentation/poky.yaml.in b/poky/documentation/poky.yaml.in
index a346b7623c..849eede289 100644
--- a/poky/documentation/poky.yaml.in
+++ b/poky/documentation/poky.yaml.in
@@ -1,10 +1,10 @@
-DISTRO : "3.4.2"
+DISTRO : "3.4.3"
DISTRO_NAME_NO_CAP : "honister"
DISTRO_NAME : "Honister"
DISTRO_NAME_NO_CAP_MINUS_ONE : "hardknott"
DISTRO_NAME_NO_CAP_LTS : "dunfell"
-YOCTO_DOC_VERSION : "3.4.2"
-DISTRO_REL_TAG : "yocto-3.4.2"
+YOCTO_DOC_VERSION : "3.4.3"
+DISTRO_REL_TAG : "yocto-3.4.3"
DOCCONF_VERSION : "dev"
BITBAKE_SERIES : ""
YOCTO_DL_URL : "https://downloads.yoctoproject.org"
diff --git a/poky/documentation/profile-manual/usage.rst b/poky/documentation/profile-manual/usage.rst
index 56f1e66674..fb1553d70d 100644
--- a/poky/documentation/profile-manual/usage.rst
+++ b/poky/documentation/profile-manual/usage.rst
@@ -171,7 +171,7 @@ understand what's going on in a way that we can act on in a useful way.
To dive down into a next level of detail, we can use 'perf record'/'perf
report' which will collect profiling data and present it to use using an
-interactive text-based UI (or simply as text if we specify --stdio to
+interactive text-based UI (or simply as text if we specify ``--stdio`` to
'perf report').
As our first attempt at profiling this workload, we'll simply run 'perf
diff --git a/poky/documentation/ref-manual/classes.rst b/poky/documentation/ref-manual/classes.rst
index 4dd0901623..6ba792d3f9 100644
--- a/poky/documentation/ref-manual/classes.rst
+++ b/poky/documentation/ref-manual/classes.rst
@@ -602,22 +602,6 @@ variables are not met, the recipe will be skipped, and if the
build system attempts to build the recipe then an error will be
triggered.
-.. _ref-classes-flit_core:
-
-``flit_core.bbclass``
-=====================
-
-The ``flit_core`` class enables building Python modules which declare
-the `PEP-517 <https://www.python.org/dev/peps/pep-0517/>`__ compliant
-``flit_core.buildapi`` ``build-backend`` in the ``[build-system]``
-section of ``pyproject.toml`` (See `PEP-518 <https://www.python.org/dev/peps/pep-0518/>`__).
-
-Python modules built with ``flit_core.buildapi`` are pure Python (no
-``C`` or ``Rust`` extensions).
-
-The resulting ``wheel`` (See `PEP-427 <https://www.python.org/dev/peps/pep-0427/>`__)
-is installed with the :ref:`python_pep517 <ref-classes-python_pep517>` class.
-
.. _ref-classes-fontcache:
``fontcache.bbclass``
@@ -1978,20 +1962,48 @@ When inherited by a recipe, the ``perlnative`` class supports using the
native version of Perl built by the build system rather than using the
version provided by the build host.
+.. _ref-classes-python_flit_core:
+
+``python_flit_core.bbclass``
+============================
+
+The ``python_flit_core`` class enables building Python modules which declare
+the `PEP-517 <https://www.python.org/dev/peps/pep-0517/>`__ compliant
+``flit_core.buildapi`` ``build-backend`` in the ``[build-system]``
+section of ``pyproject.toml`` (See `PEP-518 <https://www.python.org/dev/peps/pep-0518/>`__).
+
+Python modules built with ``flit_core.buildapi`` are pure Python (no
+``C`` or ``Rust`` extensions).
+
+Internally this uses the :ref:`python_pep517 <ref-classes-python_pep517>` class.
+
.. _ref-classes-python_pep517:
``python_pep517.bbclass``
-=============================
+=========================
+
+The ``python_pep517`` class builds and installs a Python ``wheel`` binary
+archive (see `PEP-517 <https://peps.python.org/pep-0517/>`__).
-The ``python_pep517`` class installs a Python ``wheel`` binary archive (see
-`PEP-517 <https://peps.python.org/pep-0517/>`__).
+Recipes wouldn't inherit this directly, instead typically another class will
+inherit this, add the relevant native dependencies, and set
+:term:`PEP517_BUILD_API` to the Python class which implements the PEP-517 build
+API.
-The Python ``wheel`` can be built with several classes, including :ref:`flit_core <ref-classes-flit_core>`,
-:ref:`setuptools_build_meta <ref-classes-setuptools_build_meta>`, and :ref:`setuptools3 <ref-classes-setuptools3>`.
+Examples of classes which do this are :ref:`python_flit_core
+<ref-classes-python_flit_core>`, :ref:`python_setuptools_build_meta
+<ref-classes-python_setuptools_build_meta>`, and :ref:`python_poetry_core
+<ref-classes-python_poetry_core>`.
-The path to the wheel to be installed is defined by :term:`PEP517_WHEEL_PATH`.
-This defaults to ``${D}/dist`` and should be respected by the builder class
-(such as :ref:`flit_core <ref-classes-flit_core>`).
+.. _ref-classes-python_poetry_core:
+
+``python_poetry_core.bbclass``
+==============================
+
+The ``python_poetry_core`` class enables building Python modules which use the
+`Poetry Core <https://python-poetry.org>`__ build system.
+
+Internally this uses the :ref:`python_pep517 <ref-classes-python_pep517>` class.
.. _ref-classes-pixbufcache:
@@ -2348,12 +2360,12 @@ additional configuration options you want to pass SCons command line.
The ``sdl`` class supports recipes that need to build software that uses
the Simple DirectMedia Layer (SDL) library.
-.. _ref-classes-setuptools_build_meta:
+.. _ref-classes-python_setuptools_build_meta:
-``setuptools_build_meta.bbclass``
-=================================
+``python_setuptools_build_meta.bbclass``
+========================================
-The ``setuptools_build_meta`` class enables building Python modules which
+The ``python_setuptools_build_meta`` class enables building Python modules which
declare the
`PEP-517 <https://www.python.org/dev/peps/pep-0517/>`__ compliant
``setuptools.build_meta`` ``build-backend`` in the ``[build-system]``
@@ -2362,8 +2374,7 @@ section of ``pyproject.toml`` (See `PEP-518 <https://www.python.org/dev/peps/pep
Python modules built with ``setuptools.build_meta`` can be pure Python or
include ``C`` or ``Rust`` extensions).
-The resulting ``wheel`` (See `PEP-427 <https://www.python.org/dev/peps/pep-0427/>`__)
-is installed with the :ref:`python_pep517 <ref-classes-python_pep517>` class.
+Internally this uses the :ref:`python_pep517 <ref-classes-python_pep517>` class.
.. _ref-classes-setuptools3:
diff --git a/poky/documentation/ref-manual/kickstart.rst b/poky/documentation/ref-manual/kickstart.rst
index 885c721297..d82da0ee75 100644
--- a/poky/documentation/ref-manual/kickstart.rst
+++ b/poky/documentation/ref-manual/kickstart.rst
@@ -125,6 +125,8 @@ the ``part`` and ``partition`` commands:
- ``swap``
+ - ``vfat``
+
- ``--fsoptions``: Specifies a free-form string of options to be used
when mounting the filesystem. This string is copied into the
``/etc/fstab`` file of the installed system and should be enclosed in
diff --git a/poky/documentation/ref-manual/tasks.rst b/poky/documentation/ref-manual/tasks.rst
index b51462b79a..a2b8763e7c 100644
--- a/poky/documentation/ref-manual/tasks.rst
+++ b/poky/documentation/ref-manual/tasks.rst
@@ -187,9 +187,9 @@ that either directly or indirectly depend on the installed files (e.g.
- The ``install`` utility. This utility is the preferred method.
- - The ``cp`` command with the "--no-preserve=ownership" option.
+ - The ``cp`` command with the ``--no-preserve=ownership`` option.
- - The ``tar`` command with the "--no-same-owner" option. See the
+ - The ``tar`` command with the ``--no-same-owner`` option. See the
``bin_package.bbclass`` file in the ``meta/classes`` directory of
the :term:`Source Directory` for an example.
diff --git a/poky/documentation/ref-manual/variables.rst b/poky/documentation/ref-manual/variables.rst
index 634f19a673..f9fd551478 100644
--- a/poky/documentation/ref-manual/variables.rst
+++ b/poky/documentation/ref-manual/variables.rst
@@ -231,17 +231,6 @@ system and gives an overview of their function and contents.
must set this variable in your recipe. The
:ref:`syslinux <ref-classes-syslinux>` class checks this variable.
- :term:`AVAILABLE_LICENSES`
- List of licenses found in the directories specified by
- :term:`COMMON_LICENSE_DIR` and
- :term:`LICENSE_PATH`.
-
- .. note::
-
- It is assumed that all changes to :term:`COMMON_LICENSE_DIR` and
- :term:`LICENSE_PATH` have been done before :term:`AVAILABLE_LICENSES`
- is defined (in :ref:`ref-classes-license`).
-
:term:`AVAILTUNES`
The list of defined CPU and Application Binary Interface (ABI)
tunings (i.e. "tunes") available for use by the OpenEmbedded build
@@ -3508,21 +3497,6 @@ system and gives an overview of their function and contents.
remove dependencies on or provide alternatives to components that
are required to produce a functional system image.
- .. note::
-
- It is possible to define a list of licenses that are allowed to be
- used instead of the licenses that are excluded. To do this, define
- a variable ``COMPATIBLE_LICENSES`` with the names of the licenses
- that are allowed. Then define :term:`INCOMPATIBLE_LICENSE` as::
-
- INCOMPATIBLE_LICENSE = "${@' '.join(sorted(set(d.getVar('AVAILABLE_LICENSES').split()) - set(d.getVar('COMPATIBLE_LICENSES').split())))}"
-
-
- This will result in :term:`INCOMPATIBLE_LICENSE` containing the names of
- all licenses from :term:`AVAILABLE_LICENSES` except the ones specified
- in ``COMPATIBLE_LICENSES``, thus only allowing the latter licenses to
- be used.
-
:term:`INHERIT`
Causes the named class or classes to be inherited globally. Anonymous
functions in the class or classes are not executed for the base
@@ -5632,6 +5606,11 @@ system and gives an overview of their function and contents.
:term:`PE` is the default value of the :term:`PKGE` variable.
+ :term:`PEP517_BUILD_API`
+ When used by recipes that inherit the :ref:`python_pep517
+ <ref-classes-python_pep517>` class, specifies the entry point to the
+ PEP-517 compliant build API (such as ``flit_core.buildapi``).
+
:term:`PEP517_WHEEL_PATH`
When used by recipes that inherit the
:ref:`python_pep517 <ref-classes-python_pep517>` class,
@@ -5644,12 +5623,6 @@ system and gives an overview of their function and contents.
``bash-4.2-r1/``). This variable is comprised of the following:
${:term:`PN`}-${:term:`EXTENDPE`}${:term:`PV`}-${:term:`PR`}
- :term:`PIP_INSTALL_ARGS`
- When used by recipes that inherit the
- :ref:`python_pep517 <ref-classes-python_pep517>` class,
- denotes the arguments passed to ``pip install`` to adjust the
- behavior of how the ``wheel`` is installed.
-
:term:`PIXBUF_PACKAGES`
When inheriting the :ref:`pixbufcache <ref-classes-pixbufcache>`
class, this variable identifies packages that contain the pixbuf
diff --git a/poky/documentation/releases.rst b/poky/documentation/releases.rst
index 247481f760..80eca2a401 100644
--- a/poky/documentation/releases.rst
+++ b/poky/documentation/releases.rst
@@ -18,6 +18,7 @@ Release Series 3.4 (honister)
- :yocto_docs:`3.4 Documentation </3.4>`
- :yocto_docs:`3.4.1 Documentation </3.4.1>`
- :yocto_docs:`3.4.2 Documentation </3.4.2>`
+- :yocto_docs:`3.4.3 Documentation </3.4.3>`
******************************
Release Series 3.3 (hardknott)
diff --git a/poky/documentation/set_versions.py b/poky/documentation/set_versions.py
index 1ab946fe61..fceff4dbce 100755
--- a/poky/documentation/set_versions.py
+++ b/poky/documentation/set_versions.py
@@ -23,7 +23,7 @@ ourversion = None
if len(sys.argv) == 2:
ourversion = sys.argv[1]
-activereleases = ["honister", "hardknott", "gatesgarth", "dunfell", "zeus", "warrior"]
+activereleases = ["honister", "hardknott", "dunfell"]
#devbranch = "langdale"
devbranch = "kirkstone"
ltsseries = ["kirkstone", "dunfell"]
diff --git a/poky/documentation/toaster-manual/setup-and-use.rst b/poky/documentation/toaster-manual/setup-and-use.rst
index 0da8326926..1e1a314d66 100644
--- a/poky/documentation/toaster-manual/setup-and-use.rst
+++ b/poky/documentation/toaster-manual/setup-and-use.rst
@@ -239,7 +239,7 @@ Perform the following steps to install Toaster:
$ git clone git://git.yoctoproject.org/poky
$ git checkout &DISTRO_NAME_NO_CAP;
-#. Install Toaster dependencies using the --user flag which keeps the
+#. Install Toaster dependencies using the ``--user`` flag which keeps the
Python packages isolated from your system-provided packages::
$ cd /var/www/toaster/
diff --git a/poky/meta/classes/base.bbclass b/poky/meta/classes/base.bbclass
index cc81461473..3515720bf9 100644
--- a/poky/meta/classes/base.bbclass
+++ b/poky/meta/classes/base.bbclass
@@ -20,21 +20,14 @@ PACKAGECONFIG_CONFARGS ??= ""
def oe_import(d):
import sys
- bbpath = d.getVar("BBPATH").split(":")
- sys.path[0:0] = [os.path.join(dir, "lib") for dir in bbpath]
-
- def inject(name, value):
- """Make a python object accessible from the metadata"""
- if hasattr(bb.utils, "_context"):
- bb.utils._context[name] = value
- else:
- __builtins__[name] = value
+ bbpath = [os.path.join(dir, "lib") for dir in d.getVar("BBPATH").split(":")]
+ sys.path[0:0] = [dir for dir in bbpath if dir not in sys.path]
import oe.data
for toimport in oe.data.typed_value("OE_IMPORTS", d):
try:
- imported = __import__(toimport)
- inject(toimport.split(".", 1)[0], imported)
+ # Make a python object accessible from the metadata
+ bb.utils._context[toimport.split(".", 1)[0]] = __import__(toimport)
except AttributeError as e:
bb.error("Error importing OE modules: %s" % str(e))
return ""
diff --git a/poky/meta/classes/image_types.bbclass b/poky/meta/classes/image_types.bbclass
index f643ed3ce7..960dab1a60 100644
--- a/poky/meta/classes/image_types.bbclass
+++ b/poky/meta/classes/image_types.bbclass
@@ -264,8 +264,6 @@ IMAGE_TYPES = " \
ext3 ext3.gz \
ext4 ext4.gz \
btrfs \
- iso \
- hddimg \
squashfs squashfs-xz squashfs-lzo squashfs-lz4 squashfs-zst \
ubi ubifs multiubi \
tar tar.gz tar.bz2 tar.xz tar.lz4 tar.zst \
@@ -275,6 +273,9 @@ IMAGE_TYPES = " \
f2fs \
erofs erofs-lz4 erofs-lz4hc \
"
+# These image types are x86 specific as they need syslinux
+IMAGE_TYPES:append:x86 = " hddimg iso"
+IMAGE_TYPES:append:x86-64 = " hddimg iso"
# Compression is a special case of conversion. The old variable
# names are still supported for backward-compatibility. When defining
diff --git a/poky/meta/classes/mirrors.bbclass b/poky/meta/classes/mirrors.bbclass
index 8e7b35d900..37dc449ade 100644
--- a/poky/meta/classes/mirrors.bbclass
+++ b/poky/meta/classes/mirrors.bbclass
@@ -42,6 +42,7 @@ ftp://sourceware.org/pub http://ftp.gwdg.de/pub/linux/sources.redhat.com/sourcew
cvs://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \
svn://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \
git://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \
+gitsm://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \
hg://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \
bzr://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \
p4://.*/.* http://downloads.yoctoproject.org/mirror/sources/ \
@@ -52,6 +53,7 @@ npm://.*/?.* http://downloads.yoctoproject.org/mirror/sources/ \
cvs://.*/.* http://sources.openembedded.org/ \
svn://.*/.* http://sources.openembedded.org/ \
git://.*/.* http://sources.openembedded.org/ \
+gitsm://.*/.* http://sources.openembedded.org/ \
hg://.*/.* http://sources.openembedded.org/ \
bzr://.*/.* http://sources.openembedded.org/ \
p4://.*/.* http://sources.openembedded.org/ \
diff --git a/poky/meta/classes/testimage.bbclass b/poky/meta/classes/testimage.bbclass
index 898248992c..8ffaeab284 100644
--- a/poky/meta/classes/testimage.bbclass
+++ b/poky/meta/classes/testimage.bbclass
@@ -205,7 +205,6 @@ def testimage_main(d):
import shutil
from bb.utils import export_proxies
- from oeqa.core.utils.misc import updateTestData
from oeqa.runtime.context import OERuntimeTestContext
from oeqa.runtime.context import OERuntimeTestContextExecutor
from oeqa.core.target.qemu import supported_fstypes
@@ -245,7 +244,8 @@ def testimage_main(d):
# Some variables need to be updates (mostly paths) with the
# ones of the current environment because some tests require them.
- updateTestData(d, td, d.getVar('TESTIMAGE_UPDATE_VARS').split())
+ for var in d.getVar('TESTIMAGE_UPDATE_VARS').split():
+ td[var] = d.getVar(var)
image_manifest = "%s.manifest" % image_name
image_packages = OERuntimeTestContextExecutor.readPackagesManifest(image_manifest)
diff --git a/poky/meta/classes/toolchain-scripts.bbclass b/poky/meta/classes/toolchain-scripts.bbclass
index 8f914cce27..1d7c703748 100644
--- a/poky/meta/classes/toolchain-scripts.bbclass
+++ b/poky/meta/classes/toolchain-scripts.bbclass
@@ -109,6 +109,7 @@ toolchain_shared_env_script () {
echo 'export OECORE_SDK_VERSION="${SDK_VERSION}"' >> $script
echo 'export ARCH=${ARCH}' >> $script
echo 'export CROSS_COMPILE=${TARGET_PREFIX}' >> $script
+ echo 'export OECORE_TUNE_CCARGS="${TUNE_CCARGS}"' >> $script
cat >> $script <<EOF
diff --git a/poky/meta/lib/oeqa/core/decorator/__init__.py b/poky/meta/lib/oeqa/core/decorator/__init__.py
index 1a82518ab6..93efd30e1d 100644
--- a/poky/meta/lib/oeqa/core/decorator/__init__.py
+++ b/poky/meta/lib/oeqa/core/decorator/__init__.py
@@ -5,8 +5,7 @@
#
from functools import wraps
-from abc import abstractmethod, ABCMeta
-from oeqa.core.utils.misc import strToList
+from abc import ABCMeta
decoratorClasses = set()
@@ -65,15 +64,11 @@ class OETestDiscover(OETestDecorator):
return registry['cases']
def OETestTag(*tags):
- expandedtags = []
- for tag in tags:
- expandedtags += strToList(tag)
def decorator(item):
if hasattr(item, "__oeqa_testtags"):
# do not append, create a new list (to handle classes with inheritance)
- item.__oeqa_testtags = list(item.__oeqa_testtags) + expandedtags
+ item.__oeqa_testtags = list(item.__oeqa_testtags) + list(tags)
else:
- item.__oeqa_testtags = expandedtags
+ item.__oeqa_testtags = tags
return item
return decorator
-
diff --git a/poky/meta/lib/oeqa/core/decorator/data.py b/poky/meta/lib/oeqa/core/decorator/data.py
index bc4939e87c..3ce10e5499 100644
--- a/poky/meta/lib/oeqa/core/decorator/data.py
+++ b/poky/meta/lib/oeqa/core/decorator/data.py
@@ -13,8 +13,8 @@ def has_feature(td, feature):
Checks for feature in DISTRO_FEATURES or IMAGE_FEATURES.
"""
- if (feature in td.get('DISTRO_FEATURES', '') or
- feature in td.get('IMAGE_FEATURES', '')):
+ if (feature in td.get('DISTRO_FEATURES', '').split() or
+ feature in td.get('IMAGE_FEATURES', '').split()):
return True
return False
@@ -23,18 +23,7 @@ def has_machine(td, machine):
Checks for MACHINE.
"""
- if (machine in td.get('MACHINE', '')):
- return True
- return False
-
-def is_qemu(td, qemu):
- """
- Checks if MACHINE is qemu.
- """
-
- machine = td.get('MACHINE', '')
- if (qemu in td.get('MACHINE', '') or
- machine.startswith('qemu')):
+ if (machine == td.get('MACHINE', '')):
return True
return False
@@ -189,34 +178,19 @@ class skipIfMachine(OETestDecorator):
@registerDecorator
class skipIfNotQemu(OETestDecorator):
"""
- Skip test based on MACHINE.
-
- value must be a qemu MACHINE or it will skip the test
- with msg as the reason.
+ Skip test if MACHINE is not qemu*
"""
-
- attrs = ('value', 'msg')
-
def setUpDecorator(self):
- msg = ('Checking if %s is not this MACHINE' % self.value)
- self.logger.debug(msg)
- if not is_qemu(self.case.td, self.value):
- self.case.skipTest(self.msg)
+ self.logger.debug("Checking if not qemu MACHINE")
+ if not self.case.td.get('MACHINE', '').startswith('qemu'):
+ self.case.skipTest('Test only runs on qemu machines')
@registerDecorator
class skipIfQemu(OETestDecorator):
"""
- Skip test based on Qemu Machine.
-
- value must not be a qemu machine or it will skip the test
- with msg as the reason.
- """
-
- attrs = ('value', 'msg')
-
+ Skip test if MACHINE is qemu*
+ """
def setUpDecorator(self):
- msg = ('Checking if %s is this MACHINE' % self.value)
- self.logger.debug(msg)
- if is_qemu(self.case.td, self.value):
- self.case.skipTest(self.msg)
-
+ self.logger.debug("Checking if qemu MACHINE")
+ if self.case.td.get('MACHINE', '').startswith('qemu'):
+ self.case.skipTest('Test only runs on real hardware')
diff --git a/poky/meta/lib/oeqa/core/utils/misc.py b/poky/meta/lib/oeqa/core/utils/misc.py
deleted file mode 100644
index e1a59588eb..0000000000
--- a/poky/meta/lib/oeqa/core/utils/misc.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright (C) 2016 Intel Corporation
-#
-# SPDX-License-Identifier: MIT
-#
-
-def toList(obj, obj_type, obj_name="Object"):
- if isinstance(obj, obj_type):
- return [obj]
- elif isinstance(obj, list):
- return obj
- else:
- raise TypeError("%s must be %s or list" % (obj_name, obj_type))
-
-def toSet(obj, obj_type, obj_name="Object"):
- if isinstance(obj, obj_type):
- return {obj}
- elif isinstance(obj, list):
- return set(obj)
- elif isinstance(obj, set):
- return obj
- else:
- raise TypeError("%s must be %s or set" % (obj_name, obj_type))
-
-def strToList(obj, obj_name="Object"):
- return toList(obj, str, obj_name)
-
-def strToSet(obj, obj_name="Object"):
- return toSet(obj, str, obj_name)
-
-def intToList(obj, obj_name="Object"):
- return toList(obj, int, obj_name)
-
-def dataStoteToDict(d, variables):
- data = {}
-
- for v in variables:
- data[v] = d.getVar(v)
-
- return data
-
-def updateTestData(d, td, variables):
- """
- Updates variables with values of data store to test data.
- """
- for var in variables:
- td[var] = d.getVar(var)
diff --git a/poky/meta/lib/oeqa/runtime/cases/boot.py b/poky/meta/lib/oeqa/runtime/cases/boot.py
index 2142f400a0..e1ad88a174 100644
--- a/poky/meta/lib/oeqa/runtime/cases/boot.py
+++ b/poky/meta/lib/oeqa/runtime/cases/boot.py
@@ -13,7 +13,7 @@ from oeqa.core.decorator.data import skipIfQemu
class BootTest(OERuntimeTestCase):
@OETimeout(120)
- @skipIfQemu('qemuall', 'Test only runs on real hardware')
+ @skipIfQemu()
@OETestDepends(['ssh.SSHTest.test_ssh'])
def test_reboot(self):
output = ''
diff --git a/poky/meta/lib/oeqa/runtime/cases/ethernet_ip_connman.py b/poky/meta/lib/oeqa/runtime/cases/ethernet_ip_connman.py
index e010612838..b93ee29941 100644
--- a/poky/meta/lib/oeqa/runtime/cases/ethernet_ip_connman.py
+++ b/poky/meta/lib/oeqa/runtime/cases/ethernet_ip_connman.py
@@ -11,7 +11,7 @@ class Ethernet_Test(OERuntimeTestCase):
x = '.'.join(x)
return x
- @skipIfQemu('qemuall', 'Test only runs on real hardware')
+ @skipIfQemu()
@OETestDepends(['ssh.SSHTest.test_ssh'])
def test_set_virtual_ip(self):
(status, output) = self.target.run("ifconfig eth0 | grep 'inet ' | awk '{print $2}'")
@@ -22,6 +22,7 @@ class Ethernet_Test(OERuntimeTestCase):
(status, output) = self.target.run("ifconfig eth0:1 %s netmask 255.255.255.0 && sleep 2 && ping -c 5 %s && ifconfig eth0:1 down" % (virtual_ip,virtual_ip))
self.assertEqual(status, 0, msg='Failed to create virtual ip address, output: %s' % output)
+ @skipIfQemu()
@OETestDepends(['ethernet_ip_connman.Ethernet_Test.test_set_virtual_ip'])
def test_get_ip_from_dhcp(self):
(status, output) = self.target.run("connmanctl services | grep -E '*AO Wired|*AR Wired' | awk '{print $3}'")
diff --git a/poky/meta/lib/oeqa/runtime/cases/ltp_stress.py b/poky/meta/lib/oeqa/runtime/cases/ltp_stress.py
index 2445ffbc93..ce6f4bf59d 100644
--- a/poky/meta/lib/oeqa/runtime/cases/ltp_stress.py
+++ b/poky/meta/lib/oeqa/runtime/cases/ltp_stress.py
@@ -89,8 +89,7 @@ class LtpStressTest(LtpStressBase):
# LTP stress runtime tests
#
- @skipIfQemu('qemuall', 'Test only runs on real hardware')
-
+ @skipIfQemu()
@OETestDepends(['ssh.SSHTest.test_ssh'])
@OEHasPackage(["ltp"])
def test_ltp_stress(self):
diff --git a/poky/meta/lib/oeqa/runtime/cases/storage.py b/poky/meta/lib/oeqa/runtime/cases/storage.py
index 166d26b252..972ef8210c 100644
--- a/poky/meta/lib/oeqa/runtime/cases/storage.py
+++ b/poky/meta/lib/oeqa/runtime/cases/storage.py
@@ -91,24 +91,24 @@ class UsbTest(StorageBase):
self.test_file = "usb.tst"
self.test_dir = os.path.join(self.mount_point, "oeqa")
- @skipIfQemu('qemuall', 'Test only runs on real hardware')
+ @skipIfQemu()
@OETestDepends(['ssh.SSHTest.test_ssh'])
def test_usb_mount(self):
self.storage_umount(2)
self.storage_mount(5)
- @skipIfQemu('qemuall', 'Test only runs on real hardware')
+ @skipIfQemu()
@OETestDepends(['storage.UsbTest.test_usb_mount'])
def test_usb_basic_operations(self):
self.storage_basic()
- @skipIfQemu('qemuall', 'Test only runs on real hardware')
+ @skipIfQemu()
@OETestDepends(['storage.UsbTest.test_usb_basic_operations'])
def test_usb_basic_rw(self):
self.storage_write()
self.storage_read()
- @skipIfQemu('qemuall', 'Test only runs on real hardware')
+ @skipIfQemu()
@OETestDepends(['storage.UsbTest.test_usb_mount'])
def test_usb_umount(self):
self.storage_umount(2)
@@ -126,24 +126,24 @@ class MMCTest(StorageBase):
self.test_file = "mmc.tst"
self.test_dir = os.path.join(self.mount_point, "oeqa")
- @skipIfQemu('qemuall', 'Test only runs on real hardware')
+ @skipIfQemu()
@OETestDepends(['ssh.SSHTest.test_ssh'])
def test_mmc_mount(self):
self.storage_umount(2)
self.storage_mount()
- @skipIfQemu('qemuall', 'Test only runs on real hardware')
+ @skipIfQemu()
@OETestDepends(['storage.MMCTest.test_mmc_mount'])
def test_mmc_basic_operations(self):
self.storage_basic()
- @skipIfQemu('qemuall', 'Test only runs on real hardware')
+ @skipIfQemu()
@OETestDepends(['storage.MMCTest.test_mmc_basic_operations'])
def test_mmc_basic_rw(self):
self.storage_write()
self.storage_read()
- @skipIfQemu('qemuall', 'Test only runs on real hardware')
+ @skipIfQemu()
@OETestDepends(['storage.MMCTest.test_mmc_mount'])
def test_mmc_umount(self):
self.storage_umount(2)
diff --git a/poky/meta/lib/oeqa/runtime/cases/suspend.py b/poky/meta/lib/oeqa/runtime/cases/suspend.py
index 67b6f7e56f..0382d48f45 100644
--- a/poky/meta/lib/oeqa/runtime/cases/suspend.py
+++ b/poky/meta/lib/oeqa/runtime/cases/suspend.py
@@ -23,7 +23,7 @@ class Suspend_Test(OERuntimeTestCase):
(status, output) = self.target.run('sudo rtcwake -m mem -s 10')
self.assertEqual(status, 0, msg = 'Failed to suspends your system to RAM, output : %s' % output)
- @skipIfQemu('qemuall', 'Test only runs on real hardware')
+ @skipIfQemu()
@OETestDepends(['ssh.SSHTest.test_ssh'])
def test_suspend(self):
self.test_date()
diff --git a/poky/meta/lib/oeqa/runtime/cases/usb_hid.py b/poky/meta/lib/oeqa/runtime/cases/usb_hid.py
index 3c292cf661..8743174370 100644
--- a/poky/meta/lib/oeqa/runtime/cases/usb_hid.py
+++ b/poky/meta/lib/oeqa/runtime/cases/usb_hid.py
@@ -14,7 +14,7 @@ class USB_HID_Test(OERuntimeTestCase):
return self.assertEqual(status, 0, msg = 'Failed to suspends your system to RAM, output : %s' % output)
@OEHasPackage(['xdotool'])
- @skipIfQemu('qemuall', 'Test only runs on real hardware')
+ @skipIfQemu()
@OETestDepends(['ssh.SSHTest.test_ssh'])
def test_USB_Hid_input(self):
self.keyboard_mouse_simulation()
diff --git a/poky/meta/lib/oeqa/runtime/decorator/package.py b/poky/meta/lib/oeqa/runtime/decorator/package.py
index 2d7e174dbf..8aba3f325b 100644
--- a/poky/meta/lib/oeqa/runtime/decorator/package.py
+++ b/poky/meta/lib/oeqa/runtime/decorator/package.py
@@ -5,7 +5,6 @@
#
from oeqa.core.decorator import OETestDecorator, registerDecorator
-from oeqa.core.utils.misc import strToSet
@registerDecorator
class OEHasPackage(OETestDecorator):
@@ -34,8 +33,12 @@ class OEHasPackage(OETestDecorator):
def setUpDecorator(self):
need_pkgs = set()
unneed_pkgs = set()
- pkgs = strToSet(self.need_pkgs)
- for pkg in pkgs:
+
+ # Turn literal strings into a list so we can just iterate over it
+ if isinstance(self.need_pkgs, str):
+ self.need_pkgs = [self.need_pkgs,]
+
+ for pkg in self.need_pkgs:
if pkg.startswith('!'):
unneed_pkgs.add(pkg[1:])
else:
diff --git a/poky/meta/lib/oeqa/selftest/cases/_sstatetests_noauto.py b/poky/meta/lib/oeqa/selftest/cases/_sstatetests_noauto.py
index 7ac03f0cec..bff6e7740c 100644
--- a/poky/meta/lib/oeqa/selftest/cases/_sstatetests_noauto.py
+++ b/poky/meta/lib/oeqa/selftest/cases/_sstatetests_noauto.py
@@ -6,7 +6,7 @@ import os
import shutil
import oeqa.utils.ftools as ftools
-from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_test_layer
+from oeqa.utils.commands import runCmd, bitbake, get_bb_var
from oeqa.selftest.cases.sstate import SStateBase
diff --git a/poky/meta/lib/oeqa/selftest/cases/binutils.py b/poky/meta/lib/oeqa/selftest/cases/binutils.py
index 821f52f5a8..3b0b44b390 100644
--- a/poky/meta/lib/oeqa/selftest/cases/binutils.py
+++ b/poky/meta/lib/oeqa/selftest/cases/binutils.py
@@ -1,12 +1,9 @@
# SPDX-License-Identifier: MIT
import os
-import sys
-import re
-import logging
from oeqa.core.decorator import OETestTag
from oeqa.core.case import OEPTestResultTestCase
from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import bitbake, get_bb_var, get_bb_vars
+from oeqa.utils.commands import bitbake, get_bb_vars
def parse_values(content):
for i in content:
diff --git a/poky/meta/lib/oeqa/selftest/cases/buildoptions.py b/poky/meta/lib/oeqa/selftest/cases/buildoptions.py
index bfe613b847..ad604d6ae2 100644
--- a/poky/meta/lib/oeqa/selftest/cases/buildoptions.py
+++ b/poky/meta/lib/oeqa/selftest/cases/buildoptions.py
@@ -9,7 +9,7 @@ import shutil
import tempfile
from oeqa.selftest.case import OESelftestTestCase
from oeqa.selftest.cases.buildhistory import BuildhistoryBase
-from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars
+from oeqa.utils.commands import bitbake, get_bb_var, get_bb_vars
import oeqa.utils.ftools as ftools
class ImageOptionsTests(OESelftestTestCase):
@@ -177,7 +177,12 @@ class ArchiverTest(OESelftestTestCase):
"""
Test for archiving the work directory and exporting the source files.
"""
- self.write_config("INHERIT += \"archiver\"\nARCHIVER_MODE[src] = \"original\"\nARCHIVER_MODE[srpm] = \"1\"")
+ self.write_config("""
+INHERIT += "archiver"
+PACKAGE_CLASSES = "package_rpm"
+ARCHIVER_MODE[src] = "original"
+ARCHIVER_MODE[srpm] = "1"
+""")
res = bitbake("xcursor-transparent-theme", ignore_status=True)
self.assertEqual(res.status, 0, "\nCouldn't build xcursortransparenttheme.\nbitbake output %s" % res.output)
deploy_dir_src = get_bb_var('DEPLOY_DIR_SRC')
diff --git a/poky/meta/lib/oeqa/selftest/cases/devtool.py b/poky/meta/lib/oeqa/selftest/cases/devtool.py
index e910672c31..3eea2b1a0e 100644
--- a/poky/meta/lib/oeqa/selftest/cases/devtool.py
+++ b/poky/meta/lib/oeqa/selftest/cases/devtool.py
@@ -9,10 +9,10 @@ import tempfile
import glob
import fnmatch
-import oeqa.utils.ftools as ftools
from oeqa.selftest.case import OESelftestTestCase
from oeqa.utils.commands import runCmd, bitbake, get_bb_var, create_temp_layer
from oeqa.utils.commands import get_bb_vars, runqemu, get_test_layer
+from oeqa.core.decorator import OETestTag
oldmetapath = None
@@ -1351,6 +1351,7 @@ class DevtoolExtractTests(DevtoolBase):
matches2 = glob.glob(stampprefix2 + '*')
self.assertFalse(matches2, 'Stamp files exist for recipe %s that should have been cleaned' % testrecipe2)
+ @OETestTag("runqemu")
def test_devtool_deploy_target(self):
# NOTE: Whilst this test would seemingly be better placed as a runtime test,
# unfortunately the runtime tests run under bitbake and you can't run
@@ -1471,6 +1472,14 @@ class DevtoolExtractTests(DevtoolBase):
class DevtoolUpgradeTests(DevtoolBase):
+ def setUp(self):
+ super().setUp()
+ try:
+ runCmd("git config --global user.name")
+ runCmd("git config --global user.email")
+ except:
+ self.skip("Git user.name and user.email must be set")
+
def test_devtool_upgrade(self):
# Check preconditions
self.assertTrue(not os.path.exists(self.workspacedir), 'This test cannot be run with a workspace directory under the build directory')
@@ -1866,8 +1875,9 @@ class DevtoolUpgradeTests(DevtoolBase):
Expected: devtool modify is able to checkout the source of the kernel
and modification to the source and configurations are reflected
when building the kernel.
- """
- kernel_provider = get_bb_var('PREFERRED_PROVIDER_virtual/kernel')
+ """
+ kernel_provider = self.td['PREFERRED_PROVIDER_virtual/kernel']
+
# Clean up the environment
bitbake('%s -c clean' % kernel_provider)
tempdir = tempfile.mkdtemp(prefix='devtoolqa')
@@ -1894,33 +1904,28 @@ class DevtoolUpgradeTests(DevtoolBase):
self.assertExists(os.path.join(tempdir, 'Makefile'), 'Extracted source could not be found')
#Step 4.2
configfile = os.path.join(tempdir,'.config')
- diff = runCmd('diff %s %s' % (tmpconfig, configfile))
- self.assertEqual(0,diff.status,'Kernel .config file is not the same using bitbake and devtool')
+ runCmd('diff %s %s' % (tmpconfig, configfile))
+
#Step 4.3
#NOTE: virtual/kernel is mapped to kernel_provider
- result = runCmd('devtool build %s' % kernel_provider)
- self.assertEqual(0,result.status,'Cannot build kernel using `devtool build`')
+ runCmd('devtool build %s' % kernel_provider)
kernelfile = os.path.join(get_bb_var('KBUILD_OUTPUT', kernel_provider), 'vmlinux')
self.assertExists(kernelfile, 'Kernel was not build correctly')
#Modify the kernel source
- modfile = os.path.join(tempdir,'arch/x86/boot/header.S')
- modstring = "Use a boot loader. Devtool testing."
- modapplied = runCmd("sed -i 's/Use a boot loader./%s/' %s" % (modstring, modfile))
- self.assertEqual(0,modapplied.status,'Modification to %s on kernel source failed' % modfile)
+ modfile = os.path.join(tempdir, 'init/version.c')
+ runCmd("sed -i 's/Linux/LiNuX/g' %s" % (modfile))
+
#Modify the configuration
- codeconfigfile = os.path.join(tempdir,'.config.new')
+ codeconfigfile = os.path.join(tempdir, '.config.new')
modconfopt = "CONFIG_SG_POOL=n"
- modconf = runCmd("sed -i 's/CONFIG_SG_POOL=y/%s/' %s" % (modconfopt, codeconfigfile))
- self.assertEqual(0,modconf.status,'Modification to %s failed' % codeconfigfile)
+ runCmd("sed -i 's/CONFIG_SG_POOL=y/%s/' %s" % (modconfopt, codeconfigfile))
+
#Build again kernel with devtool
- rebuild = runCmd('devtool build %s' % kernel_provider)
- self.assertEqual(0,rebuild.status,'Fail to build kernel after modification of source and config')
+ runCmd('devtool build %s' % kernel_provider)
+
#Step 4.4
- bzimagename = 'bzImage-' + get_bb_var('KERNEL_VERSION_NAME', kernel_provider)
- bzimagefile = os.path.join(get_bb_var('D', kernel_provider),'boot', bzimagename)
- checkmodcode = runCmd("grep '%s' %s" % (modstring, bzimagefile))
- self.assertEqual(0,checkmodcode.status,'Modification on kernel source failed')
+ runCmd("grep '%s' %s" % ('LiNuX', kernelfile))
+
#Step 4.5
- checkmodconfg = runCmd("grep %s %s" % (modconfopt, codeconfigfile))
- self.assertEqual(0,checkmodconfg.status,'Modification to configuration file failed')
+ runCmd("grep %s %s" % (modconfopt, codeconfigfile))
diff --git a/poky/meta/lib/oeqa/selftest/cases/distrodata.py b/poky/meta/lib/oeqa/selftest/cases/distrodata.py
index 03f31e9fcb..b80d091c1c 100644
--- a/poky/meta/lib/oeqa/selftest/cases/distrodata.py
+++ b/poky/meta/lib/oeqa/selftest/cases/distrodata.py
@@ -3,9 +3,6 @@
#
from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars
-from oeqa.utils.decorators import testcase
-from oeqa.utils.ftools import write_file
import oe.recipeutils
diff --git a/poky/meta/lib/oeqa/selftest/cases/eSDK.py b/poky/meta/lib/oeqa/selftest/cases/eSDK.py
index f7279b3230..3ea0f66357 100644
--- a/poky/meta/lib/oeqa/selftest/cases/eSDK.py
+++ b/poky/meta/lib/oeqa/selftest/cases/eSDK.py
@@ -8,7 +8,7 @@ import os
import glob
import time
from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars
+from oeqa.utils.commands import runCmd, bitbake, get_bb_vars
class oeSDKExtSelfTest(OESelftestTestCase):
"""
diff --git a/poky/meta/lib/oeqa/selftest/cases/fitimage.py b/poky/meta/lib/oeqa/selftest/cases/fitimage.py
index f6f6a8e795..e6bfd1257e 100644
--- a/poky/meta/lib/oeqa/selftest/cases/fitimage.py
+++ b/poky/meta/lib/oeqa/selftest/cases/fitimage.py
@@ -3,9 +3,8 @@
#
from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import runCmd, bitbake, get_bb_var, runqemu
+from oeqa.utils.commands import runCmd, bitbake, get_bb_var
import os
-import json
import re
class FitImageTests(OESelftestTestCase):
diff --git a/poky/meta/lib/oeqa/selftest/cases/gcc.py b/poky/meta/lib/oeqa/selftest/cases/gcc.py
index 3efe15228f..b9ea03ae62 100644
--- a/poky/meta/lib/oeqa/selftest/cases/gcc.py
+++ b/poky/meta/lib/oeqa/selftest/cases/gcc.py
@@ -3,7 +3,7 @@ import os
from oeqa.core.decorator import OETestTag
from oeqa.core.case import OEPTestResultTestCase
from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import bitbake, get_bb_var, get_bb_vars, runqemu, Command
+from oeqa.utils.commands import bitbake, get_bb_var, get_bb_vars, runqemu
def parse_values(content):
for i in content:
@@ -114,37 +114,44 @@ class GccLibItmSelfTest(GccSelfTestBase):
self.run_check("libitm")
@OETestTag("toolchain-system")
+@OETestTag("runqemu")
class GccCrossSelfTestSystemEmulated(GccSelfTestBase):
def test_cross_gcc(self):
self.run_check_emulated("gcc")
@OETestTag("toolchain-system")
+@OETestTag("runqemu")
class GxxCrossSelfTestSystemEmulated(GccSelfTestBase):
def test_cross_gxx(self):
self.run_check_emulated("g++")
@OETestTag("toolchain-system")
+@OETestTag("runqemu")
class GccLibAtomicSelfTestSystemEmulated(GccSelfTestBase):
def test_libatomic(self):
self.run_check_emulated("libatomic")
@OETestTag("toolchain-system")
+@OETestTag("runqemu")
class GccLibGompSelfTestSystemEmulated(GccSelfTestBase):
def test_libgomp(self):
self.run_check_emulated("libgomp")
@OETestTag("toolchain-system")
+@OETestTag("runqemu")
class GccLibStdCxxSelfTestSystemEmulated(GccSelfTestBase):
def test_libstdcxx(self):
self.run_check_emulated("libstdc++-v3")
@OETestTag("toolchain-system")
+@OETestTag("runqemu")
class GccLibSspSelfTestSystemEmulated(GccSelfTestBase):
def test_libssp(self):
self.check_skip("libssp")
self.run_check_emulated("libssp")
@OETestTag("toolchain-system")
+@OETestTag("runqemu")
class GccLibItmSelfTestSystemEmulated(GccSelfTestBase):
def test_libitm(self):
self.check_skip("libitm")
diff --git a/poky/meta/lib/oeqa/selftest/cases/glibc.py b/poky/meta/lib/oeqa/selftest/cases/glibc.py
index 6f96281ea5..6fc98e9cb4 100644
--- a/poky/meta/lib/oeqa/selftest/cases/glibc.py
+++ b/poky/meta/lib/oeqa/selftest/cases/glibc.py
@@ -4,7 +4,7 @@ import contextlib
from oeqa.core.decorator import OETestTag
from oeqa.core.case import OEPTestResultTestCase
from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import bitbake, get_bb_var, get_bb_vars, runqemu, Command
+from oeqa.utils.commands import bitbake, get_bb_var, runqemu
from oeqa.utils.nfs import unfs_server
def parse_values(content):
@@ -83,6 +83,7 @@ class GlibcSelfTest(GlibcSelfTestBase):
self.run_check()
@OETestTag("toolchain-system")
+@OETestTag("runqemu")
class GlibcSelfTestSystemEmulated(GlibcSelfTestBase):
def test_glibc(self):
self.run_check_emulated()
diff --git a/poky/meta/lib/oeqa/selftest/cases/imagefeatures.py b/poky/meta/lib/oeqa/selftest/cases/imagefeatures.py
index d36d45c551..6b94ace4eb 100644
--- a/poky/meta/lib/oeqa/selftest/cases/imagefeatures.py
+++ b/poky/meta/lib/oeqa/selftest/cases/imagefeatures.py
@@ -3,6 +3,7 @@
#
from oeqa.selftest.case import OESelftestTestCase
+from oeqa.core.decorator import OETestTag
from oeqa.utils.commands import runCmd, bitbake, get_bb_var, runqemu
from oeqa.utils.sshcontrol import SSHControl
import glob
@@ -14,6 +15,7 @@ class ImageFeatures(OESelftestTestCase):
test_user = 'tester'
root_user = 'root'
+ @OETestTag("runqemu")
def test_non_root_user_can_connect_via_ssh_without_password(self):
"""
Summary: Check if non root user can connect via ssh without password
@@ -39,6 +41,7 @@ class ImageFeatures(OESelftestTestCase):
status, output = ssh.run("true")
self.assertEqual(status, 0, 'ssh to user %s failed with %s' % (user, output))
+ @OETestTag("runqemu")
def test_all_users_can_connect_via_ssh_without_password(self):
"""
Summary: Check if all users can connect via ssh without password
diff --git a/poky/meta/lib/oeqa/selftest/cases/layerappend.py b/poky/meta/lib/oeqa/selftest/cases/layerappend.py
index dadc7c5d28..8fb1e6c530 100644
--- a/poky/meta/lib/oeqa/selftest/cases/layerappend.py
+++ b/poky/meta/lib/oeqa/selftest/cases/layerappend.py
@@ -5,7 +5,7 @@
import os
from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import runCmd, bitbake, get_bb_var
+from oeqa.utils.commands import bitbake, get_bb_var
import oeqa.utils.ftools as ftools
class LayerAppendTests(OESelftestTestCase):
diff --git a/poky/meta/lib/oeqa/selftest/cases/lic_checksum.py b/poky/meta/lib/oeqa/selftest/cases/lic_checksum.py
index 91021ac335..f8681ed755 100644
--- a/poky/meta/lib/oeqa/selftest/cases/lic_checksum.py
+++ b/poky/meta/lib/oeqa/selftest/cases/lic_checksum.py
@@ -7,7 +7,6 @@ import tempfile
from oeqa.selftest.case import OESelftestTestCase
from oeqa.utils.commands import bitbake
-from oeqa.utils import CommandError
class LicenseTests(OESelftestTestCase):
diff --git a/poky/meta/lib/oeqa/selftest/cases/manifest.py b/poky/meta/lib/oeqa/selftest/cases/manifest.py
index 5d13f35468..0a04c13a85 100644
--- a/poky/meta/lib/oeqa/selftest/cases/manifest.py
+++ b/poky/meta/lib/oeqa/selftest/cases/manifest.py
@@ -5,7 +5,7 @@
import os
from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import get_bb_var, get_bb_vars, bitbake
+from oeqa.utils.commands import get_bb_var, bitbake
class ManifestEntry:
'''A manifest item of a collection able to list missing packages'''
diff --git a/poky/meta/lib/oeqa/selftest/cases/oescripts.py b/poky/meta/lib/oeqa/selftest/cases/oescripts.py
index 91abf9654a..cd687816c8 100644
--- a/poky/meta/lib/oeqa/selftest/cases/oescripts.py
+++ b/poky/meta/lib/oeqa/selftest/cases/oescripts.py
@@ -8,7 +8,7 @@ import importlib
import unittest
from oeqa.selftest.case import OESelftestTestCase
from oeqa.selftest.cases.buildhistory import BuildhistoryBase
-from oeqa.utils.commands import Command, runCmd, bitbake, get_bb_var, get_test_layer
+from oeqa.utils.commands import runCmd, bitbake, get_bb_var
from oeqa.utils import CommandError
class BuildhistoryDiffTests(BuildhistoryBase):
@@ -34,21 +34,19 @@ class BuildhistoryDiffTests(BuildhistoryBase):
if expected_endlines:
self.fail('Missing expected line endings:\n %s' % '\n '.join(expected_endlines))
-@unittest.skipUnless(importlib.util.find_spec("cairo"), "Python cairo module is not present")
class OEScriptTests(OESelftestTestCase):
+ scripts_dir = os.path.join(get_bb_var('COREBASE'), 'scripts')
+
+@unittest.skipUnless(importlib.util.find_spec("cairo"), "Python cairo module is not present")
+class OEPybootchartguyTests(OEScriptTests):
@classmethod
def setUpClass(cls):
super(OEScriptTests, cls).setUpClass()
- import cairo
bitbake("core-image-minimal -c rootfs -f")
cls.tmpdir = get_bb_var('TMPDIR')
cls.buildstats = cls.tmpdir + "/buildstats/" + sorted(os.listdir(cls.tmpdir + "/buildstats"))[-1]
- scripts_dir = os.path.join(get_bb_var('COREBASE'), 'scripts')
-
-class OEPybootchartguyTests(OEScriptTests):
-
def test_pybootchartguy_help(self):
runCmd('%s/pybootchartgui/pybootchartgui.py --help' % self.scripts_dir)
@@ -65,9 +63,7 @@ class OEPybootchartguyTests(OEScriptTests):
self.assertTrue(os.path.exists(self.tmpdir + "/charts.pdf"))
-class OEGitproxyTests(OESelftestTestCase):
-
- scripts_dir = os.path.join(get_bb_var('COREBASE'), 'scripts')
+class OEGitproxyTests(OEScriptTests):
def test_oegitproxy_help(self):
try:
diff --git a/poky/meta/lib/oeqa/selftest/cases/overlayfs.py b/poky/meta/lib/oeqa/selftest/cases/overlayfs.py
index 56ae48ce64..472746a64f 100644
--- a/poky/meta/lib/oeqa/selftest/cases/overlayfs.py
+++ b/poky/meta/lib/oeqa/selftest/cases/overlayfs.py
@@ -3,7 +3,8 @@
#
from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import runCmd, bitbake, get_bb_var, runqemu
+from oeqa.utils.commands import bitbake, runqemu
+from oeqa.core.decorator import OETestTag
def getline_qemu(out, line):
for l in out.split('\n'):
@@ -185,6 +186,7 @@ EOT
line = getline_qemu(output, "upperdir=/mnt/overlay/upper/usr/share/another-overlay-mount")
self.assertTrue(line and line.startswith("overlay"), msg=output)
+ @OETestTag("runqemu")
def test_correct_image_fstab(self):
"""
Summary: Check that we can create an image when all parameters are
@@ -203,6 +205,7 @@ EOT
self._test_correct_image('base-files', base_files_append)
+ @OETestTag("runqemu")
def test_correct_image_unit(self):
"""
Summary: Check that we can create an image when all parameters are
@@ -238,6 +241,7 @@ EOT
self._test_correct_image('systemd-machine-units', systemd_machine_unit_append)
+@OETestTag("runqemu")
class OverlayFSEtcRunTimeTests(OESelftestTestCase):
"""overlayfs-etc class tests"""
diff --git a/poky/meta/lib/oeqa/selftest/cases/package.py b/poky/meta/lib/oeqa/selftest/cases/package.py
index cebbb4f3f4..51d835259e 100644
--- a/poky/meta/lib/oeqa/selftest/cases/package.py
+++ b/poky/meta/lib/oeqa/selftest/cases/package.py
@@ -4,7 +4,6 @@
from oeqa.selftest.case import OESelftestTestCase
from oeqa.utils.commands import bitbake, get_bb_vars, get_bb_var, runqemu
-import stat
import subprocess, os
import oe.path
import re
diff --git a/poky/meta/lib/oeqa/selftest/cases/recipeutils.py b/poky/meta/lib/oeqa/selftest/cases/recipeutils.py
index f1dd63f65b..74b2098ae8 100644
--- a/poky/meta/lib/oeqa/selftest/cases/recipeutils.py
+++ b/poky/meta/lib/oeqa/selftest/cases/recipeutils.py
@@ -2,14 +2,10 @@
# SPDX-License-Identifier: MIT
#
-import os
-import re
-import time
-import logging
import bb.tinfoil
from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import runCmd, get_test_layer
+from oeqa.utils.commands import get_test_layer
def setUpModule():
diff --git a/poky/meta/lib/oeqa/selftest/cases/reproducible.py b/poky/meta/lib/oeqa/selftest/cases/reproducible.py
index 7caf8c3e7d..5042c11d8e 100644
--- a/poky/meta/lib/oeqa/selftest/cases/reproducible.py
+++ b/poky/meta/lib/oeqa/selftest/cases/reproducible.py
@@ -9,8 +9,6 @@ import bb.utils
import functools
import multiprocessing
import textwrap
-import json
-import unittest
import tempfile
import shutil
import stat
diff --git a/poky/meta/lib/oeqa/selftest/cases/runqemu.py b/poky/meta/lib/oeqa/selftest/cases/runqemu.py
index da22f77b27..c1d277a095 100644
--- a/poky/meta/lib/oeqa/selftest/cases/runqemu.py
+++ b/poky/meta/lib/oeqa/selftest/cases/runqemu.py
@@ -12,6 +12,7 @@ from oeqa.core.decorator import OETestTag
from oeqa.selftest.case import OESelftestTestCase
from oeqa.utils.commands import bitbake, runqemu, get_bb_var, runCmd
+@OETestTag("runqemu")
class RunqemuTests(OESelftestTestCase):
"""Runqemu test class"""
@@ -149,6 +150,7 @@ SYSLINUX_TIMEOUT = "10"
# bootup various filesystem types, including live image(iso and hddimg)
# where live image was not supported on all qemu architecture.
@OETestTag("machine")
+@OETestTag("runqemu")
class QemuTest(OESelftestTestCase):
@classmethod
diff --git a/poky/meta/lib/oeqa/selftest/cases/runtime_test.py b/poky/meta/lib/oeqa/selftest/cases/runtime_test.py
index 642f0eb637..2ad89490fc 100644
--- a/poky/meta/lib/oeqa/selftest/cases/runtime_test.py
+++ b/poky/meta/lib/oeqa/selftest/cases/runtime_test.py
@@ -4,16 +4,15 @@
from oeqa.selftest.case import OESelftestTestCase
from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars, runqemu
-from oeqa.utils.sshcontrol import SSHControl
+from oeqa.core.decorator import OETestTag
import os
-import re
import tempfile
-import shutil
import oe.lsb
from oeqa.core.decorator.data import skipIfNotQemu
class TestExport(OESelftestTestCase):
+ @OETestTag("runqemu")
def test_testexport_basic(self):
"""
Summary: Check basic testexport functionality with only ping test enabled.
@@ -106,6 +105,7 @@ class TestExport(OESelftestTestCase):
self.assertEqual(0, result.status, "Couldn't run tar from SDK")
+@OETestTag("runqemu")
class TestImage(OESelftestTestCase):
def test_testimage_install(self):
@@ -240,6 +240,7 @@ class TestImage(OESelftestTestCase):
bitbake('core-image-minimal')
bitbake('-c testimage core-image-minimal')
+@OETestTag("runqemu")
class Postinst(OESelftestTestCase):
def init_manager_loop(self, init_manager):
@@ -280,7 +281,7 @@ class Postinst(OESelftestTestCase):
- @skipIfNotQemu('qemuall', 'Test only runs in qemu')
+ @skipIfNotQemu()
def test_postinst_rootfs_and_boot_sysvinit(self):
"""
Summary: The purpose of this test case is to verify Post-installation
@@ -301,7 +302,7 @@ class Postinst(OESelftestTestCase):
self.init_manager_loop("sysvinit")
- @skipIfNotQemu('qemuall', 'Test only runs in qemu')
+ @skipIfNotQemu()
def test_postinst_rootfs_and_boot_systemd(self):
"""
Summary: The purpose of this test case is to verify Post-installation
@@ -357,6 +358,7 @@ class Postinst(OESelftestTestCase):
self.assertFalse(os.path.isfile(os.path.join(hosttestdir, "rootfs-after-failure")),
"rootfs-after-failure file was created")
+@OETestTag("runqemu")
class SystemTap(OESelftestTestCase):
"""
Summary: The purpose of this test case is to verify native crosstap
@@ -433,4 +435,3 @@ IMAGE_INSTALL:append = " systemtap-runtime"
cmd = "crosstap -r root@192.168.7.2 -s %s/process/ syscalls_by_pid.stp" % systemtap_examples
result = runCmd(cmd)
self.assertEqual(0, result.status, 'crosstap syscalls_by_pid returned a non 0 status:%s' % result.output)
-
diff --git a/poky/meta/lib/oeqa/selftest/cases/selftest.py b/poky/meta/lib/oeqa/selftest/cases/selftest.py
index af080dcf03..7268e25939 100644
--- a/poky/meta/lib/oeqa/selftest/cases/selftest.py
+++ b/poky/meta/lib/oeqa/selftest/cases/selftest.py
@@ -3,7 +3,6 @@
#
import importlib
-from oeqa.utils.commands import runCmd
import oeqa.selftest
from oeqa.selftest.case import OESelftestTestCase
diff --git a/poky/meta/lib/oeqa/selftest/cases/sstate.py b/poky/meta/lib/oeqa/selftest/cases/sstate.py
index 80ce9e353c..176766331a 100644
--- a/poky/meta/lib/oeqa/selftest/cases/sstate.py
+++ b/poky/meta/lib/oeqa/selftest/cases/sstate.py
@@ -3,14 +3,11 @@
#
import datetime
-import unittest
import os
import re
-import shutil
-import oeqa.utils.ftools as ftools
from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import runCmd, bitbake, get_bb_vars, get_test_layer
+from oeqa.utils.commands import get_bb_vars
class SStateBase(OESelftestTestCase):
diff --git a/poky/meta/lib/oeqa/selftest/cases/sstatetests.py b/poky/meta/lib/oeqa/selftest/cases/sstatetests.py
index 3038b40021..4a32af902f 100644
--- a/poky/meta/lib/oeqa/selftest/cases/sstatetests.py
+++ b/poky/meta/lib/oeqa/selftest/cases/sstatetests.py
@@ -8,8 +8,7 @@ import glob
import subprocess
import tempfile
-from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_test_layer, create_temp_layer
+from oeqa.utils.commands import runCmd, bitbake, get_bb_var, create_temp_layer
from oeqa.selftest.cases.sstate import SStateBase
import oe
diff --git a/poky/meta/lib/oeqa/selftest/cases/sysroot.py b/poky/meta/lib/oeqa/selftest/cases/sysroot.py
index 79ab45235d..315d1a61c2 100644
--- a/poky/meta/lib/oeqa/selftest/cases/sysroot.py
+++ b/poky/meta/lib/oeqa/selftest/cases/sysroot.py
@@ -5,7 +5,7 @@
import uuid
from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import bitbake
+from oeqa.utils.commands import bitbake
class SysrootTests(OESelftestTestCase):
def test_sysroot_cleanup(self):
diff --git a/poky/meta/lib/oeqa/selftest/cases/tinfoil.py b/poky/meta/lib/oeqa/selftest/cases/tinfoil.py
index 6f26af23d5..c81d56d82b 100644
--- a/poky/meta/lib/oeqa/selftest/cases/tinfoil.py
+++ b/poky/meta/lib/oeqa/selftest/cases/tinfoil.py
@@ -9,7 +9,6 @@ import logging
import bb.tinfoil
from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import runCmd
class TinfoilTests(OESelftestTestCase):
""" Basic tests for the tinfoil API """
diff --git a/poky/meta/lib/oeqa/selftest/cases/wic.py b/poky/meta/lib/oeqa/selftest/cases/wic.py
index 6f3dc27743..de74c07a03 100644
--- a/poky/meta/lib/oeqa/selftest/cases/wic.py
+++ b/poky/meta/lib/oeqa/selftest/cases/wic.py
@@ -19,29 +19,26 @@ from functools import wraps, lru_cache
from tempfile import NamedTemporaryFile
from oeqa.selftest.case import OESelftestTestCase
+from oeqa.core.decorator import OETestTag
from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars, runqemu
-@lru_cache(maxsize=32)
-def get_host_arch(recipe):
- """A cached call to get_bb_var('HOST_ARCH', <recipe>)"""
- return get_bb_var('HOST_ARCH', recipe)
+@lru_cache()
+def get_host_arch():
+ return get_bb_var('HOST_ARCH')
-def only_for_arch(archs, image='core-image-minimal'):
+def only_for_arch(archs):
"""Decorator for wrapping test cases that can be run only for specific target
architectures. A list of compatible architectures is passed in `archs`.
- Current architecture will be determined by parsing bitbake output for
- `image` recipe.
"""
def wrapper(func):
@wraps(func)
def wrapped_f(*args, **kwargs):
- arch = get_host_arch(image)
+ arch = get_host_arch()
if archs and arch not in archs:
raise unittest.SkipTest("Testcase arch dependency not met: %s" % arch)
return func(*args, **kwargs)
- wrapped_f.__name__ = func.__name__
return wrapped_f
return wrapper
@@ -78,22 +75,18 @@ class WicTestCase(OESelftestTestCase):
def setUpLocal(self):
"""This code is executed before each test method."""
- self.resultdir = self.builddir + "/wic-tmp/"
+ self.resultdir = os.path.join(self.builddir, "wic-tmp")
super(WicTestCase, self).setUpLocal()
# Do this here instead of in setUpClass as the base setUp does some
# clean up which can result in the native tools built earlier in
# setUpClass being unavailable.
if not WicTestCase.image_is_ready:
- if get_bb_var('USE_NLS') == 'yes':
- bitbake('wic-tools')
- else:
- self.skipTest('wic-tools cannot be built due its (intltool|gettext)-native dependency and NLS disable')
+ if self.td['USE_NLS'] != 'yes':
+ self.skipTest('wic-tools needs USE_NLS=yes')
- bitbake('core-image-minimal')
- bitbake('core-image-minimal-mtdutils')
+ bitbake('wic-tools core-image-minimal core-image-minimal-mtdutils')
WicTestCase.image_is_ready = True
-
rmtree(self.resultdir, ignore_errors=True)
def tearDownLocal(self):
@@ -104,15 +97,13 @@ class WicTestCase(OESelftestTestCase):
def _get_image_env_path(self, image):
"""Generate and obtain the path to <image>.env"""
if image not in WicTestCase.wicenv_cache:
- self.assertEqual(0, bitbake('%s -c do_rootfs_wicenv' % image).status)
- bb_vars = get_bb_vars(['STAGING_DIR', 'MACHINE'], image)
- stdir = bb_vars['STAGING_DIR']
- machine = bb_vars['MACHINE']
+ bitbake('%s -c do_rootfs_wicenv' % image)
+ stdir = get_bb_var('STAGING_DIR', image)
+ machine = self.td["MACHINE"]
WicTestCase.wicenv_cache[image] = os.path.join(stdir, machine, 'imgdata')
return WicTestCase.wicenv_cache[image]
-class Wic(WicTestCase):
-
+class CLITests(OESelftestTestCase):
def test_version(self):
"""Test wic --version"""
runCmd('wic --version')
@@ -173,18 +164,19 @@ class Wic(WicTestCase):
"""Test wic without command"""
self.assertEqual(1, runCmd('wic', ignore_status=True).status)
+class Wic(WicTestCase):
def test_build_image_name(self):
"""Test wic create wictestdisk --image-name=core-image-minimal"""
cmd = "wic create wictestdisk --image-name=core-image-minimal -o %s" % self.resultdir
runCmd(cmd)
- self.assertEqual(1, len(glob(self.resultdir + "wictestdisk-*.direct")))
+ self.assertEqual(1, len(glob(os.path.join (self.resultdir, "wictestdisk-*.direct"))))
@only_for_arch(['i586', 'i686', 'x86_64'])
def test_gpt_image(self):
"""Test creation of core-image-minimal with gpt table and UUID boot"""
cmd = "wic create directdisk-gpt --image-name core-image-minimal -o %s" % self.resultdir
runCmd(cmd)
- self.assertEqual(1, len(glob(self.resultdir + "directdisk-*.direct")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "directdisk-*.direct"))))
@only_for_arch(['i586', 'i686', 'x86_64'])
def test_iso_image(self):
@@ -197,22 +189,22 @@ class Wic(WicTestCase):
self.remove_config(config)
cmd = "wic create mkhybridiso --image-name core-image-minimal -o %s" % self.resultdir
runCmd(cmd)
- self.assertEqual(1, len(glob(self.resultdir + "HYBRID_ISO_IMG-*.direct")))
- self.assertEqual(1, len(glob(self.resultdir + "HYBRID_ISO_IMG-*.iso")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "HYBRID_ISO_IMG-*.direct"))))
+ self.assertEqual(1, len(glob(os.path.join (self.resultdir, "HYBRID_ISO_IMG-*.iso"))))
@only_for_arch(['i586', 'i686', 'x86_64'])
def test_qemux86_directdisk(self):
"""Test creation of qemux-86-directdisk image"""
cmd = "wic create qemux86-directdisk -e core-image-minimal -o %s" % self.resultdir
runCmd(cmd)
- self.assertEqual(1, len(glob(self.resultdir + "qemux86-directdisk-*direct")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "qemux86-directdisk-*direct"))))
- @only_for_arch(['i586', 'i686', 'x86_64'])
+ @only_for_arch(['i586', 'i686', 'x86_64', 'aarch64'])
def test_mkefidisk(self):
"""Test creation of mkefidisk image"""
cmd = "wic create mkefidisk -e core-image-minimal -o %s" % self.resultdir
runCmd(cmd)
- self.assertEqual(1, len(glob(self.resultdir + "mkefidisk-*direct")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "mkefidisk-*direct"))))
@only_for_arch(['i586', 'i686', 'x86_64'])
def test_bootloader_config(self):
@@ -223,9 +215,9 @@ class Wic(WicTestCase):
self.remove_config(config)
cmd = "wic create directdisk-bootloader-config -e core-image-minimal -o %s" % self.resultdir
runCmd(cmd)
- self.assertEqual(1, len(glob(self.resultdir + "directdisk-bootloader-config-*direct")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "directdisk-bootloader-config-*direct"))))
- @only_for_arch(['i586', 'i686', 'x86_64'])
+ @only_for_arch(['i586', 'i686', 'x86_64', 'aarch64'])
def test_systemd_bootdisk(self):
"""Test creation of systemd-bootdisk image"""
config = 'MACHINE_FEATURES:append = " efi"\n'
@@ -234,7 +226,7 @@ class Wic(WicTestCase):
self.remove_config(config)
cmd = "wic create systemd-bootdisk -e core-image-minimal -o %s" % self.resultdir
runCmd(cmd)
- self.assertEqual(1, len(glob(self.resultdir + "systemd-bootdisk-*direct")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "systemd-bootdisk-*direct"))))
def test_efi_bootpart(self):
"""Test creation of efi-bootpart image"""
@@ -243,7 +235,7 @@ class Wic(WicTestCase):
self.append_config('IMAGE_EFI_BOOT_FILES = "%s;kernel"\n' % kimgtype)
runCmd(cmd)
sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
- images = glob(self.resultdir + "mkefidisk-*.direct")
+ images = glob(os.path.join(self.resultdir, "mkefidisk-*.direct"))
result = runCmd("wic ls %s:1/ -n %s" % (images[0], sysroot))
self.assertIn("kernel",result.output)
@@ -253,8 +245,9 @@ class Wic(WicTestCase):
kimgtype = get_bb_var('KERNEL_IMAGETYPE', 'core-image-minimal')
self.write_config('IMAGE_BOOT_FILES = "%s"\n' % kimgtype)
runCmd(cmd)
- self.assertEqual(1, len(glob(self.resultdir + "sdimage-bootpart-*direct")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "sdimage-bootpart-*direct"))))
+ # TODO this doesn't have to be x86-specific
@only_for_arch(['i586', 'i686', 'x86_64'])
def test_default_output_dir(self):
"""Test default output location"""
@@ -283,28 +276,28 @@ class Wic(WicTestCase):
"-n %(recipe_sysroot_native)s "
"-r %(image_rootfs)s "
"-o %(resultdir)s" % bbvars)
- self.assertEqual(1, len(glob(self.resultdir + "directdisk-*.direct")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "directdisk-*.direct"))))
def test_compress_gzip(self):
"""Test compressing an image with gzip"""
runCmd("wic create wictestdisk "
"--image-name core-image-minimal "
"-c gzip -o %s" % self.resultdir)
- self.assertEqual(1, len(glob(self.resultdir + "wictestdisk-*.direct.gz")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "wictestdisk-*.direct.gz"))))
def test_compress_bzip2(self):
"""Test compressing an image with bzip2"""
runCmd("wic create wictestdisk "
"--image-name=core-image-minimal "
"-c bzip2 -o %s" % self.resultdir)
- self.assertEqual(1, len(glob(self.resultdir + "wictestdisk-*.direct.bz2")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "wictestdisk-*.direct.bz2"))))
def test_compress_xz(self):
"""Test compressing an image with xz"""
runCmd("wic create wictestdisk "
"--image-name=core-image-minimal "
"--compress-with=xz -o %s" % self.resultdir)
- self.assertEqual(1, len(glob(self.resultdir + "wictestdisk-*.direct.xz")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "wictestdisk-*.direct.xz"))))
def test_wrong_compressor(self):
"""Test how wic breaks if wrong compressor is provided"""
@@ -318,23 +311,23 @@ class Wic(WicTestCase):
runCmd("wic create wictestdisk "
"--image-name=core-image-minimal "
"-D -o %s" % self.resultdir)
- self.assertEqual(1, len(glob(self.resultdir + "wictestdisk-*.direct")))
- self.assertEqual(1, len(glob(self.resultdir + "tmp.wic*")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "wictestdisk-*.direct"))))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "tmp.wic*"))))
def test_debug_long(self):
"""Test --debug option"""
runCmd("wic create wictestdisk "
"--image-name=core-image-minimal "
"--debug -o %s" % self.resultdir)
- self.assertEqual(1, len(glob(self.resultdir + "wictestdisk-*.direct")))
- self.assertEqual(1, len(glob(self.resultdir + "tmp.wic*")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "wictestdisk-*.direct"))))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "tmp.wic*"))))
def test_skip_build_check_short(self):
"""Test -s option"""
runCmd("wic create wictestdisk "
"--image-name=core-image-minimal "
"-s -o %s" % self.resultdir)
- self.assertEqual(1, len(glob(self.resultdir + "wictestdisk-*.direct")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "wictestdisk-*.direct"))))
def test_skip_build_check_long(self):
"""Test --skip-build-check option"""
@@ -342,14 +335,14 @@ class Wic(WicTestCase):
"--image-name=core-image-minimal "
"--skip-build-check "
"--outdir %s" % self.resultdir)
- self.assertEqual(1, len(glob(self.resultdir + "wictestdisk-*.direct")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "wictestdisk-*.direct"))))
def test_build_rootfs_short(self):
"""Test -f option"""
runCmd("wic create wictestdisk "
"--image-name=core-image-minimal "
"-f -o %s" % self.resultdir)
- self.assertEqual(1, len(glob(self.resultdir + "wictestdisk-*.direct")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "wictestdisk-*.direct"))))
def test_build_rootfs_long(self):
"""Test --build-rootfs option"""
@@ -357,8 +350,9 @@ class Wic(WicTestCase):
"--image-name=core-image-minimal "
"--build-rootfs "
"--outdir %s" % self.resultdir)
- self.assertEqual(1, len(glob(self.resultdir + "wictestdisk-*.direct")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "wictestdisk-*.direct"))))
+ # TODO this doesn't have to be x86-specific
@only_for_arch(['i586', 'i686', 'x86_64'])
def test_rootfs_indirect_recipes(self):
"""Test usage of rootfs plugin with rootfs recipes"""
@@ -367,8 +361,9 @@ class Wic(WicTestCase):
"--rootfs rootfs1=core-image-minimal "
"--rootfs rootfs2=core-image-minimal "
"--outdir %s" % self.resultdir)
- self.assertEqual(1, len(glob(self.resultdir + "directdisk-multi-rootfs*.direct")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "directdisk-multi-rootfs*.direct"))))
+ # TODO this doesn't have to be x86-specific
@only_for_arch(['i586', 'i686', 'x86_64'])
def test_rootfs_artifacts(self):
"""Test usage of rootfs plugin with rootfs paths"""
@@ -386,7 +381,7 @@ class Wic(WicTestCase):
"--rootfs-dir rootfs1=%(image_rootfs)s "
"--rootfs-dir rootfs2=%(image_rootfs)s "
"--outdir %(resultdir)s" % bbvars)
- self.assertEqual(1, len(glob(self.resultdir + "%(wks)s-*.direct" % bbvars)))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "%(wks)s-*.direct" % bbvars))))
def test_exclude_path(self):
"""Test --exclude-path wks option."""
@@ -407,7 +402,7 @@ part /etc --source rootfs --ondisk mmcblk0 --fstype=ext4 --exclude-path bin/ --r
% (wks_file, self.resultdir))
os.remove(wks_file)
- wicout = glob(self.resultdir + "%s-*direct" % 'temp')
+ wicout = glob(os.path.join(self.resultdir, "%s-*direct" % 'temp'))
self.assertEqual(1, len(wicout))
wicimg = wicout[0]
@@ -694,8 +689,8 @@ part /etc --source rootfs --fstype=ext4 --change-directory=etc
os.environ['PATH'] = get_bb_var("PATH", "wic-tools")
# Get stock fstab from base-files recipe
- self.assertEqual(0, bitbake('base-files -c do_install').status)
- bf_fstab = os.path.join(get_bb_var('D', 'base-files'), 'etc/fstab')
+ bitbake('base-files -c do_install')
+ bf_fstab = os.path.join(get_bb_var('D', 'base-files'), 'etc', 'fstab')
self.assertEqual(True, os.path.exists(bf_fstab))
bf_fstab_md5sum = runCmd('md5sum %s 2>/dev/null' % bf_fstab).output.split(" ")[0]
@@ -750,7 +745,7 @@ part /etc --source rootfs --fstype=ext4 --change-directory=etc
runCmd("wic create wictestdisk "
"--image-name core-image-minimal "
"--extra-space %i -o %s" % (extraspace ,self.resultdir))
- wicout = glob(self.resultdir + "wictestdisk-*.direct")
+ wicout = glob(os.path.join(self.resultdir, "wictestdisk-*.direct"))
self.assertEqual(1, len(wicout))
size = os.path.getsize(wicout[0])
self.assertTrue(size > extraspace)
@@ -761,15 +756,15 @@ class Wic2(WicTestCase):
"""Test generation of .bmap file -m option"""
cmd = "wic create wictestdisk -e core-image-minimal -m -o %s" % self.resultdir
runCmd(cmd)
- self.assertEqual(1, len(glob(self.resultdir + "wictestdisk-*direct")))
- self.assertEqual(1, len(glob(self.resultdir + "wictestdisk-*direct.bmap")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "wictestdisk-*direct"))))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "wictestdisk-*direct.bmap"))))
def test_bmap_long(self):
"""Test generation of .bmap file --bmap option"""
cmd = "wic create wictestdisk -e core-image-minimal --bmap -o %s" % self.resultdir
runCmd(cmd)
- self.assertEqual(1, len(glob(self.resultdir + "wictestdisk-*direct")))
- self.assertEqual(1, len(glob(self.resultdir + "wictestdisk-*direct.bmap")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "wictestdisk-*direct"))))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "wictestdisk-*direct.bmap"))))
def test_image_env(self):
"""Test generation of <image>.env files."""
@@ -805,7 +800,7 @@ class Wic2(WicTestCase):
"--image-name=%s -v %s -n %s -o %s"
% (image, imgenvdir, native_sysroot,
self.resultdir))
- self.assertEqual(1, len(glob(self.resultdir + "wictestdisk-*direct")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "wictestdisk-*direct"))))
def test_image_vars_dir_long(self):
"""Test image vars directory selection --vars option"""
@@ -820,20 +815,19 @@ class Wic2(WicTestCase):
"--outdir %s"
% (image, imgenvdir, native_sysroot,
self.resultdir))
- self.assertEqual(1, len(glob(self.resultdir + "wictestdisk-*direct")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "wictestdisk-*direct"))))
- @only_for_arch(['i586', 'i686', 'x86_64'])
+ @only_for_arch(['i586', 'i686', 'x86_64', 'aarch64'])
def test_wic_image_type(self):
"""Test building wic images by bitbake"""
config = 'IMAGE_FSTYPES += "wic"\nWKS_FILE = "wic-image-minimal"\n'\
'MACHINE_FEATURES:append = " efi"\n'
self.append_config(config)
- self.assertEqual(0, bitbake('wic-image-minimal').status)
+ bitbake('wic-image-minimal')
self.remove_config(config)
- bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'MACHINE'])
- deploy_dir = bb_vars['DEPLOY_DIR_IMAGE']
- machine = bb_vars['MACHINE']
+ deploy_dir = get_bb_var('DEPLOY_DIR_IMAGE')
+ machine = self.td['MACHINE']
prefix = os.path.join(deploy_dir, 'wic-image-minimal-%s.' % machine)
# check if we have result image and manifests symlinks
# pointing to existing files
@@ -842,13 +836,15 @@ class Wic2(WicTestCase):
self.assertTrue(os.path.islink(path))
self.assertTrue(os.path.isfile(os.path.realpath(path)))
+ # TODO this should work on aarch64
@only_for_arch(['i586', 'i686', 'x86_64'])
+ @OETestTag("runqemu")
def test_qemu(self):
"""Test wic-image-minimal under qemu"""
config = 'IMAGE_FSTYPES += "wic"\nWKS_FILE = "wic-image-minimal"\n'\
'MACHINE_FEATURES:append = " efi"\n'
self.append_config(config)
- self.assertEqual(0, bitbake('wic-image-minimal').status)
+ bitbake('wic-image-minimal')
self.remove_config(config)
with runqemu('wic-image-minimal', ssh=False, runqemuparams='nographic') as qemu:
@@ -863,11 +859,12 @@ class Wic2(WicTestCase):
self.assertEqual(output, 'UUID=2c71ef06-a81d-4735-9d3a-379b69c6bdba\t/media\text4\tdefaults\t0\t0')
@only_for_arch(['i586', 'i686', 'x86_64'])
+ @OETestTag("runqemu")
def test_qemu_efi(self):
"""Test core-image-minimal efi image under qemu"""
config = 'IMAGE_FSTYPES = "wic"\nWKS_FILE = "mkefidisk.wks"\n'
self.append_config(config)
- self.assertEqual(0, bitbake('core-image-minimal ovmf').status)
+ bitbake('core-image-minimal ovmf')
self.remove_config(config)
with runqemu('core-image-minimal', ssh=False,
@@ -900,7 +897,7 @@ class Wic2(WicTestCase):
wksname = os.path.splitext(os.path.basename(wkspath))[0]
- wicout = glob(self.resultdir + "%s-*direct" % wksname)
+ wicout = glob(os.path.join(self.resultdir, "%s-*direct" % wksname))
if not wicout:
return (p, None)
@@ -1045,18 +1042,19 @@ class Wic2(WicTestCase):
size = int(size[:-3])
self.assertGreaterEqual(size, 204800)
- @only_for_arch(['i586', 'i686', 'x86_64'])
+ @only_for_arch(['i586', 'i686', 'x86_64', 'aarch64'])
+ @OETestTag("runqemu")
def test_rawcopy_plugin_qemu(self):
"""Test rawcopy plugin in qemu"""
# build ext4 and then use it for a wic image
config = 'IMAGE_FSTYPES = "ext4"\n'
self.append_config(config)
- self.assertEqual(0, bitbake('core-image-minimal').status)
+ bitbake('core-image-minimal')
self.remove_config(config)
config = 'IMAGE_FSTYPES = "wic"\nWKS_FILE = "test_rawcopy_plugin.wks.in"\n'
self.append_config(config)
- self.assertEqual(0, bitbake('core-image-minimal-mtdutils').status)
+ bitbake('core-image-minimal-mtdutils')
self.remove_config(config)
with runqemu('core-image-minimal-mtdutils', ssh=False,
@@ -1069,7 +1067,7 @@ class Wic2(WicTestCase):
def _rawcopy_plugin(self, fstype):
"""Test rawcopy plugin"""
img = 'core-image-minimal'
- machine = get_bb_var('MACHINE', img)
+ machine = self.td["MACHINE"]
params = ',unpack' if fstype.endswith('.gz') else ''
with NamedTemporaryFile("w", suffix=".wks") as wks:
wks.write('part / --source rawcopy --sourceparams="file=%s-%s.%s%s"\n'\
@@ -1078,7 +1076,7 @@ class Wic2(WicTestCase):
cmd = "wic create %s -e %s -o %s" % (wks.name, img, self.resultdir)
runCmd(cmd)
wksname = os.path.splitext(os.path.basename(wks.name))[0]
- out = glob(self.resultdir + "%s-*direct" % wksname)
+ out = glob(os.path.join(self.resultdir, "%s-*direct" % wksname))
self.assertEqual(1, len(out))
def test_rawcopy_plugin(self):
@@ -1096,14 +1094,13 @@ class Wic2(WicTestCase):
"""Test empty plugin"""
config = 'IMAGE_FSTYPES = "wic"\nWKS_FILE = "test_empty_plugin.wks"\n'
self.append_config(config)
- self.assertEqual(0, bitbake('core-image-minimal').status)
+ bitbake('core-image-minimal')
self.remove_config(config)
+ deploy_dir = get_bb_var('DEPLOY_DIR_IMAGE')
+ machine = self.td['MACHINE']
- bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'MACHINE'])
- deploy_dir = bb_vars['DEPLOY_DIR_IMAGE']
- machine = bb_vars['MACHINE']
image_path = os.path.join(deploy_dir, 'core-image-minimal-%s.wic' % machine)
- self.assertEqual(True, os.path.exists(image_path))
+ self.assertTrue(os.path.exists(image_path))
sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
@@ -1113,11 +1110,12 @@ class Wic2(WicTestCase):
self.assertEqual('1', result.output)
@only_for_arch(['i586', 'i686', 'x86_64'])
+ @OETestTag("runqemu")
def test_biosplusefi_plugin_qemu(self):
"""Test biosplusefi plugin in qemu"""
config = 'IMAGE_FSTYPES = "wic"\nWKS_FILE = "test_biosplusefi_plugin.wks"\nMACHINE_FEATURES:append = " efi"\n'
self.append_config(config)
- self.assertEqual(0, bitbake('core-image-minimal').status)
+ bitbake('core-image-minimal')
self.remove_config(config)
with runqemu('core-image-minimal', ssh=False,
@@ -1155,7 +1153,7 @@ class Wic2(WicTestCase):
# The easiest way to work-around this issue is to make sure we already built an image here, hence the bitbake call
config = 'IMAGE_FSTYPES = "wic"\nWKS_FILE = "test_biosplusefi_plugin.wks"\nMACHINE_FEATURES:append = " efi"\n'
self.append_config(config)
- self.assertEqual(0, bitbake('core-image-minimal').status)
+ bitbake('core-image-minimal')
self.remove_config(config)
img = 'core-image-minimal'
@@ -1167,10 +1165,12 @@ class Wic2(WicTestCase):
cmd = "wic create %s -e %s -o %s" % (wks.name, img, self.resultdir)
runCmd(cmd)
wksname = os.path.splitext(os.path.basename(wks.name))[0]
- out = glob(self.resultdir + "%s-*.direct" % wksname)
+ out = glob(os.path.join(self.resultdir, "%s-*.direct" % wksname))
self.assertEqual(1, len(out))
+ # TODO this test could also work on aarch64
@only_for_arch(['i586', 'i686', 'x86_64'])
+ @OETestTag("runqemu")
def test_efi_plugin_unified_kernel_image_qemu(self):
"""Test efi plugin's Unified Kernel Image feature in qemu"""
config = 'IMAGE_FSTYPES = "wic"\n'\
@@ -1178,7 +1178,7 @@ class Wic2(WicTestCase):
'WKS_FILE = "test_efi_plugin.wks"\n'\
'MACHINE_FEATURES:append = " efi"\n'
self.append_config(config)
- self.assertEqual(0, bitbake('core-image-minimal core-image-minimal-initramfs ovmf').status)
+ bitbake('core-image-minimal core-image-minimal-initramfs ovmf')
self.remove_config(config)
with runqemu('core-image-minimal', ssh=False,
@@ -1215,7 +1215,7 @@ class Wic2(WicTestCase):
cmd = "wic create %s -e %s -o %s" % (wks.name, img, self.resultdir)
runCmd(cmd)
wksname = os.path.splitext(os.path.basename(wks.name))[0]
- out = glob(self.resultdir + "%s-*direct" % wksname)
+ out = glob(os.path.join(self.resultdir, "%s-*direct" % wksname))
self.assertEqual(1, len(out))
def test_kickstart_parser(self):
@@ -1227,7 +1227,7 @@ class Wic2(WicTestCase):
cmd = "wic create %s -e core-image-minimal -o %s" % (wks.name, self.resultdir)
runCmd(cmd)
wksname = os.path.splitext(os.path.basename(wks.name))[0]
- out = glob(self.resultdir + "%s-*direct" % wksname)
+ out = glob(os.path.join(self.resultdir, "%s-*direct" % wksname))
self.assertEqual(1, len(out))
def test_image_bootpart_globbed(self):
@@ -1238,11 +1238,11 @@ class Wic2(WicTestCase):
self.append_config(config)
runCmd(cmd)
self.remove_config(config)
- self.assertEqual(1, len(glob(self.resultdir + "sdimage-bootpart-*direct")))
+ self.assertEqual(1, len(glob(os.path.join(self.resultdir, "sdimage-bootpart-*direct"))))
def test_sparse_copy(self):
"""Test sparse_copy with FIEMAP and SEEK_HOLE filemap APIs"""
- libpath = os.path.join(get_bb_var('COREBASE'), 'scripts', 'lib', 'wic')
+ libpath = os.path.join(self.td['COREBASE'], 'scripts', 'lib', 'wic')
sys.path.insert(0, libpath)
from filemap import FilemapFiemap, FilemapSeek, sparse_copy, ErrorNotSupp
with NamedTemporaryFile("w", suffix=".wic-sparse") as sparse:
@@ -1268,12 +1268,86 @@ class Wic2(WicTestCase):
self.assertEqual(dest_stat.st_blocks, 8)
os.unlink(dest)
+ def test_mkfs_extraopts(self):
+ """Test wks option --mkfs-extraopts for empty and not empty partitions"""
+ img = 'core-image-minimal'
+ with NamedTemporaryFile("w", suffix=".wks") as wks:
+ wks.writelines(
+ ['part ext2 --fstype ext2 --source rootfs --mkfs-extraopts "-D -F -i 8192"\n',
+ "part btrfs --fstype btrfs --source rootfs --size 40M --mkfs-extraopts='--quiet'\n",
+ 'part squash --fstype squashfs --source rootfs --mkfs-extraopts "-no-sparse -b 4096"\n',
+ 'part emptyvfat --fstype vfat --size 1M --mkfs-extraopts "-S 1024 -s 64"\n',
+ 'part emptymsdos --fstype msdos --size 1M --mkfs-extraopts "-S 1024 -s 64"\n',
+ 'part emptyext2 --fstype ext2 --size 1M --mkfs-extraopts "-D -F -i 8192"\n',
+ 'part emptybtrfs --fstype btrfs --size 100M --mkfs-extraopts "--mixed -K"\n'])
+ wks.flush()
+ cmd = "wic create %s -e %s -o %s" % (wks.name, img, self.resultdir)
+ runCmd(cmd)
+ wksname = os.path.splitext(os.path.basename(wks.name))[0]
+ out = glob(os.path.join(self.resultdir, "%s-*direct" % wksname))
+ self.assertEqual(1, len(out))
+
+ @only_for_arch(['i586', 'i686', 'x86_64'])
+ @OETestTag("runqemu")
+ def test_expand_mbr_image(self):
+ """Test wic write --expand command for mbr image"""
+ # build an image
+ config = 'IMAGE_FSTYPES = "wic"\nWKS_FILE = "directdisk.wks"\n'
+ self.append_config(config)
+ bitbake('core-image-minimal')
+
+ # get path to the image
+ deploy_dir = get_bb_var('DEPLOY_DIR_IMAGE')
+ machine = self.td['MACHINE']
+ image_path = os.path.join(deploy_dir, 'core-image-minimal-%s.wic' % machine)
+
+ self.remove_config(config)
+
+ try:
+ # expand image to 1G
+ new_image_path = None
+ with NamedTemporaryFile(mode='wb', suffix='.wic.exp',
+ dir=deploy_dir, delete=False) as sparse:
+ sparse.truncate(1024 ** 3)
+ new_image_path = sparse.name
+
+ sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
+ cmd = "wic write -n %s --expand 1:0 %s %s" % (sysroot, image_path, new_image_path)
+ runCmd(cmd)
+
+ # check if partitions are expanded
+ orig = runCmd("wic ls %s -n %s" % (image_path, sysroot))
+ exp = runCmd("wic ls %s -n %s" % (new_image_path, sysroot))
+ orig_sizes = [int(line.split()[3]) for line in orig.output.split('\n')[1:]]
+ exp_sizes = [int(line.split()[3]) for line in exp.output.split('\n')[1:]]
+ self.assertEqual(orig_sizes[0], exp_sizes[0]) # first partition is not resized
+ self.assertTrue(orig_sizes[1] < exp_sizes[1])
+
+ # Check if all free space is partitioned
+ result = runCmd("%s/usr/sbin/sfdisk -F %s" % (sysroot, new_image_path))
+ self.assertTrue("0 B, 0 bytes, 0 sectors" in result.output)
+
+ os.rename(image_path, image_path + '.bak')
+ os.rename(new_image_path, image_path)
+
+ # Check if it boots in qemu
+ with runqemu('core-image-minimal', ssh=False, runqemuparams='nographic') as qemu:
+ cmd = "ls /etc/"
+ status, output = qemu.run_serial('true')
+ self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
+ finally:
+ if os.path.exists(new_image_path):
+ os.unlink(new_image_path)
+ if os.path.exists(image_path + '.bak'):
+ os.rename(image_path + '.bak', image_path)
+
+class ModifyTests(WicTestCase):
def test_wic_ls(self):
"""Test listing image content using 'wic ls'"""
runCmd("wic create wictestdisk "
"--image-name=core-image-minimal "
"-D -o %s" % self.resultdir)
- images = glob(self.resultdir + "wictestdisk-*.direct")
+ images = glob(os.path.join(self.resultdir, "wictestdisk-*.direct"))
self.assertEqual(1, len(images))
sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
@@ -1291,7 +1365,7 @@ class Wic2(WicTestCase):
runCmd("wic create wictestdisk "
"--image-name=core-image-minimal "
"-D -o %s" % self.resultdir)
- images = glob(self.resultdir + "wictestdisk-*.direct")
+ images = glob(os.path.join(self.resultdir, "wictestdisk-*.direct"))
self.assertEqual(1, len(images))
sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
@@ -1337,105 +1411,35 @@ class Wic2(WicTestCase):
runCmd("wic create mkefidisk "
"--image-name=core-image-minimal "
"-D -o %s" % self.resultdir)
- images = glob(self.resultdir + "mkefidisk-*.direct")
+ images = glob(os.path.join(self.resultdir, "mkefidisk-*.direct"))
self.assertEqual(1, len(images))
sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
+ # Not bulletproof but hopefully sufficient
+ kerneltype = get_bb_var('KERNEL_IMAGETYPE', 'virtual/kernel')
# list directory content of the first partition
result = runCmd("wic ls %s:1 -n %s" % (images[0], sysroot))
- self.assertIn('\nBZIMAGE ', result.output)
+ self.assertIn('\n%s ' % kerneltype.upper(), result.output)
self.assertIn('\nEFI <DIR> ', result.output)
- # remove file
- runCmd("wic rm %s:1/bzimage -n %s" % (images[0], sysroot))
+ # remove file. EFI partitions are case-insensitive so exercise that too
+ runCmd("wic rm %s:1/%s -n %s" % (images[0], kerneltype.lower(), sysroot))
# remove directory
runCmd("wic rm %s:1/efi -n %s" % (images[0], sysroot))
# check if they're removed
result = runCmd("wic ls %s:1 -n %s" % (images[0], sysroot))
- self.assertNotIn('\nBZIMAGE ', result.output)
+ self.assertNotIn('\n%s ' % kerneltype.upper(), result.output)
self.assertNotIn('\nEFI <DIR> ', result.output)
- def test_mkfs_extraopts(self):
- """Test wks option --mkfs-extraopts for empty and not empty partitions"""
- img = 'core-image-minimal'
- with NamedTemporaryFile("w", suffix=".wks") as wks:
- wks.writelines(
- ['part ext2 --fstype ext2 --source rootfs --mkfs-extraopts "-D -F -i 8192"\n',
- "part btrfs --fstype btrfs --source rootfs --size 40M --mkfs-extraopts='--quiet'\n",
- 'part squash --fstype squashfs --source rootfs --mkfs-extraopts "-no-sparse -b 4096"\n',
- 'part emptyvfat --fstype vfat --size 1M --mkfs-extraopts "-S 1024 -s 64"\n',
- 'part emptymsdos --fstype msdos --size 1M --mkfs-extraopts "-S 1024 -s 64"\n',
- 'part emptyext2 --fstype ext2 --size 1M --mkfs-extraopts "-D -F -i 8192"\n',
- 'part emptybtrfs --fstype btrfs --size 100M --mkfs-extraopts "--mixed -K"\n'])
- wks.flush()
- cmd = "wic create %s -e %s -o %s" % (wks.name, img, self.resultdir)
- runCmd(cmd)
- wksname = os.path.splitext(os.path.basename(wks.name))[0]
- out = glob(self.resultdir + "%s-*direct" % wksname)
- self.assertEqual(1, len(out))
-
- def test_expand_mbr_image(self):
- """Test wic write --expand command for mbr image"""
- # build an image
- config = 'IMAGE_FSTYPES = "wic"\nWKS_FILE = "directdisk.wks"\n'
- self.append_config(config)
- self.assertEqual(0, bitbake('core-image-minimal').status)
-
- # get path to the image
- bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'MACHINE'])
- deploy_dir = bb_vars['DEPLOY_DIR_IMAGE']
- machine = bb_vars['MACHINE']
- image_path = os.path.join(deploy_dir, 'core-image-minimal-%s.wic' % machine)
-
- self.remove_config(config)
-
- try:
- # expand image to 1G
- new_image_path = None
- with NamedTemporaryFile(mode='wb', suffix='.wic.exp',
- dir=deploy_dir, delete=False) as sparse:
- sparse.truncate(1024 ** 3)
- new_image_path = sparse.name
-
- sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
- cmd = "wic write -n %s --expand 1:0 %s %s" % (sysroot, image_path, new_image_path)
- runCmd(cmd)
-
- # check if partitions are expanded
- orig = runCmd("wic ls %s -n %s" % (image_path, sysroot))
- exp = runCmd("wic ls %s -n %s" % (new_image_path, sysroot))
- orig_sizes = [int(line.split()[3]) for line in orig.output.split('\n')[1:]]
- exp_sizes = [int(line.split()[3]) for line in exp.output.split('\n')[1:]]
- self.assertEqual(orig_sizes[0], exp_sizes[0]) # first partition is not resized
- self.assertTrue(orig_sizes[1] < exp_sizes[1])
-
- # Check if all free space is partitioned
- result = runCmd("%s/usr/sbin/sfdisk -F %s" % (sysroot, new_image_path))
- self.assertTrue("0 B, 0 bytes, 0 sectors" in result.output)
-
- bb.utils.rename(image_path, image_path + '.bak')
- bb.utils.rename(new_image_path, image_path)
-
- # Check if it boots in qemu
- with runqemu('core-image-minimal', ssh=False, runqemuparams='nographic') as qemu:
- cmd = "ls /etc/"
- status, output = qemu.run_serial('true')
- self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
- finally:
- if os.path.exists(new_image_path):
- os.unlink(new_image_path)
- if os.path.exists(image_path + '.bak'):
- bb.utils.rename(image_path + '.bak', image_path)
-
def test_wic_ls_ext(self):
"""Test listing content of the ext partition using 'wic ls'"""
runCmd("wic create wictestdisk "
"--image-name=core-image-minimal "
"-D -o %s" % self.resultdir)
- images = glob(self.resultdir + "wictestdisk-*.direct")
+ images = glob(os.path.join(self.resultdir, "wictestdisk-*.direct"))
self.assertEqual(1, len(images))
sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
@@ -1450,7 +1454,7 @@ class Wic2(WicTestCase):
runCmd("wic create wictestdisk "
"--image-name=core-image-minimal "
"-D -o %s" % self.resultdir)
- images = glob(self.resultdir + "wictestdisk-*.direct")
+ images = glob(os.path.join(self.resultdir, "wictestdisk-*.direct"))
self.assertEqual(1, len(images))
sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
@@ -1486,7 +1490,7 @@ class Wic2(WicTestCase):
runCmd("wic create mkefidisk "
"--image-name=core-image-minimal "
"-D -o %s" % self.resultdir)
- images = glob(self.resultdir + "mkefidisk-*.direct")
+ images = glob(os.path.join(self.resultdir, "mkefidisk-*.direct"))
self.assertEqual(1, len(images))
sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
diff --git a/poky/meta/recipes-bsp/keymaps/files/GPLv2.patch b/poky/meta/recipes-bsp/keymaps/files/GPLv2.patch
deleted file mode 100644
index 1ee8181f12..0000000000
--- a/poky/meta/recipes-bsp/keymaps/files/GPLv2.patch
+++ /dev/null
@@ -1,347 +0,0 @@
-Upstream-Status: Inappropriate [licensing]
-
-diff --git a/COPYING b/COPYING
-new file mode 100644
-index 0000000..d511905
---- /dev/null
-+++ b/COPYING
-@@ -0,0 +1,339 @@
-+ GNU GENERAL PUBLIC LICENSE
-+ Version 2, June 1991
-+
-+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
-+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ Everyone is permitted to copy and distribute verbatim copies
-+ of this license document, but changing it is not allowed.
-+
-+ Preamble
-+
-+ The licenses for most software are designed to take away your
-+freedom to share and change it. By contrast, the GNU General Public
-+License is intended to guarantee your freedom to share and change free
-+software--to make sure the software is free for all its users. This
-+General Public License applies to most of the Free Software
-+Foundation's software and to any other program whose authors commit to
-+using it. (Some other Free Software Foundation software is covered by
-+the GNU Lesser General Public License instead.) You can apply it to
-+your programs, too.
-+
-+ When we speak of free software, we are referring to freedom, not
-+price. Our General Public Licenses are designed to make sure that you
-+have the freedom to distribute copies of free software (and charge for
-+this service if you wish), that you receive source code or can get it
-+if you want it, that you can change the software or use pieces of it
-+in new free programs; and that you know you can do these things.
-+
-+ To protect your rights, we need to make restrictions that forbid
-+anyone to deny you these rights or to ask you to surrender the rights.
-+These restrictions translate to certain responsibilities for you if you
-+distribute copies of the software, or if you modify it.
-+
-+ For example, if you distribute copies of such a program, whether
-+gratis or for a fee, you must give the recipients all the rights that
-+you have. You must make sure that they, too, receive or can get the
-+source code. And you must show them these terms so they know their
-+rights.
-+
-+ We protect your rights with two steps: (1) copyright the software, and
-+(2) offer you this license which gives you legal permission to copy,
-+distribute and/or modify the software.
-+
-+ Also, for each author's protection and ours, we want to make certain
-+that everyone understands that there is no warranty for this free
-+software. If the software is modified by someone else and passed on, we
-+want its recipients to know that what they have is not the original, so
-+that any problems introduced by others will not reflect on the original
-+authors' reputations.
-+
-+ Finally, any free program is threatened constantly by software
-+patents. We wish to avoid the danger that redistributors of a free
-+program will individually obtain patent licenses, in effect making the
-+program proprietary. To prevent this, we have made it clear that any
-+patent must be licensed for everyone's free use or not licensed at all.
-+
-+ The precise terms and conditions for copying, distribution and
-+modification follow.
-+
-+ GNU GENERAL PUBLIC LICENSE
-+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-+
-+ 0. This License applies to any program or other work which contains
-+a notice placed by the copyright holder saying it may be distributed
-+under the terms of this General Public License. The "Program", below,
-+refers to any such program or work, and a "work based on the Program"
-+means either the Program or any derivative work under copyright law:
-+that is to say, a work containing the Program or a portion of it,
-+either verbatim or with modifications and/or translated into another
-+language. (Hereinafter, translation is included without limitation in
-+the term "modification".) Each licensee is addressed as "you".
-+
-+Activities other than copying, distribution and modification are not
-+covered by this License; they are outside its scope. The act of
-+running the Program is not restricted, and the output from the Program
-+is covered only if its contents constitute a work based on the
-+Program (independent of having been made by running the Program).
-+Whether that is true depends on what the Program does.
-+
-+ 1. You may copy and distribute verbatim copies of the Program's
-+source code as you receive it, in any medium, provided that you
-+conspicuously and appropriately publish on each copy an appropriate
-+copyright notice and disclaimer of warranty; keep intact all the
-+notices that refer to this License and to the absence of any warranty;
-+and give any other recipients of the Program a copy of this License
-+along with the Program.
-+
-+You may charge a fee for the physical act of transferring a copy, and
-+you may at your option offer warranty protection in exchange for a fee.
-+
-+ 2. You may modify your copy or copies of the Program or any portion
-+of it, thus forming a work based on the Program, and copy and
-+distribute such modifications or work under the terms of Section 1
-+above, provided that you also meet all of these conditions:
-+
-+ a) You must cause the modified files to carry prominent notices
-+ stating that you changed the files and the date of any change.
-+
-+ b) You must cause any work that you distribute or publish, that in
-+ whole or in part contains or is derived from the Program or any
-+ part thereof, to be licensed as a whole at no charge to all third
-+ parties under the terms of this License.
-+
-+ c) If the modified program normally reads commands interactively
-+ when run, you must cause it, when started running for such
-+ interactive use in the most ordinary way, to print or display an
-+ announcement including an appropriate copyright notice and a
-+ notice that there is no warranty (or else, saying that you provide
-+ a warranty) and that users may redistribute the program under
-+ these conditions, and telling the user how to view a copy of this
-+ License. (Exception: if the Program itself is interactive but
-+ does not normally print such an announcement, your work based on
-+ the Program is not required to print an announcement.)
-+
-+These requirements apply to the modified work as a whole. If
-+identifiable sections of that work are not derived from the Program,
-+and can be reasonably considered independent and separate works in
-+themselves, then this License, and its terms, do not apply to those
-+sections when you distribute them as separate works. But when you
-+distribute the same sections as part of a whole which is a work based
-+on the Program, the distribution of the whole must be on the terms of
-+this License, whose permissions for other licensees extend to the
-+entire whole, and thus to each and every part regardless of who wrote it.
-+
-+Thus, it is not the intent of this section to claim rights or contest
-+your rights to work written entirely by you; rather, the intent is to
-+exercise the right to control the distribution of derivative or
-+collective works based on the Program.
-+
-+In addition, mere aggregation of another work not based on the Program
-+with the Program (or with a work based on the Program) on a volume of
-+a storage or distribution medium does not bring the other work under
-+the scope of this License.
-+
-+ 3. You may copy and distribute the Program (or a work based on it,
-+under Section 2) in object code or executable form under the terms of
-+Sections 1 and 2 above provided that you also do one of the following:
-+
-+ a) Accompany it with the complete corresponding machine-readable
-+ source code, which must be distributed under the terms of Sections
-+ 1 and 2 above on a medium customarily used for software interchange; or,
-+
-+ b) Accompany it with a written offer, valid for at least three
-+ years, to give any third party, for a charge no more than your
-+ cost of physically performing source distribution, a complete
-+ machine-readable copy of the corresponding source code, to be
-+ distributed under the terms of Sections 1 and 2 above on a medium
-+ customarily used for software interchange; or,
-+
-+ c) Accompany it with the information you received as to the offer
-+ to distribute corresponding source code. (This alternative is
-+ allowed only for noncommercial distribution and only if you
-+ received the program in object code or executable form with such
-+ an offer, in accord with Subsection b above.)
-+
-+The source code for a work means the preferred form of the work for
-+making modifications to it. For an executable work, complete source
-+code means all the source code for all modules it contains, plus any
-+associated interface definition files, plus the scripts used to
-+control compilation and installation of the executable. However, as a
-+special exception, the source code distributed need not include
-+anything that is normally distributed (in either source or binary
-+form) with the major components (compiler, kernel, and so on) of the
-+operating system on which the executable runs, unless that component
-+itself accompanies the executable.
-+
-+If distribution of executable or object code is made by offering
-+access to copy from a designated place, then offering equivalent
-+access to copy the source code from the same place counts as
-+distribution of the source code, even though third parties are not
-+compelled to copy the source along with the object code.
-+
-+ 4. You may not copy, modify, sublicense, or distribute the Program
-+except as expressly provided under this License. Any attempt
-+otherwise to copy, modify, sublicense or distribute the Program is
-+void, and will automatically terminate your rights under this License.
-+However, parties who have received copies, or rights, from you under
-+this License will not have their licenses terminated so long as such
-+parties remain in full compliance.
-+
-+ 5. You are not required to accept this License, since you have not
-+signed it. However, nothing else grants you permission to modify or
-+distribute the Program or its derivative works. These actions are
-+prohibited by law if you do not accept this License. Therefore, by
-+modifying or distributing the Program (or any work based on the
-+Program), you indicate your acceptance of this License to do so, and
-+all its terms and conditions for copying, distributing or modifying
-+the Program or works based on it.
-+
-+ 6. Each time you redistribute the Program (or any work based on the
-+Program), the recipient automatically receives a license from the
-+original licensor to copy, distribute or modify the Program subject to
-+these terms and conditions. You may not impose any further
-+restrictions on the recipients' exercise of the rights granted herein.
-+You are not responsible for enforcing compliance by third parties to
-+this License.
-+
-+ 7. If, as a consequence of a court judgment or allegation of patent
-+infringement or for any other reason (not limited to patent issues),
-+conditions are imposed on you (whether by court order, agreement or
-+otherwise) that contradict the conditions of this License, they do not
-+excuse you from the conditions of this License. If you cannot
-+distribute so as to satisfy simultaneously your obligations under this
-+License and any other pertinent obligations, then as a consequence you
-+may not distribute the Program at all. For example, if a patent
-+license would not permit royalty-free redistribution of the Program by
-+all those who receive copies directly or indirectly through you, then
-+the only way you could satisfy both it and this License would be to
-+refrain entirely from distribution of the Program.
-+
-+If any portion of this section is held invalid or unenforceable under
-+any particular circumstance, the balance of the section is intended to
-+apply and the section as a whole is intended to apply in other
-+circumstances.
-+
-+It is not the purpose of this section to induce you to infringe any
-+patents or other property right claims or to contest validity of any
-+such claims; this section has the sole purpose of protecting the
-+integrity of the free software distribution system, which is
-+implemented by public license practices. Many people have made
-+generous contributions to the wide range of software distributed
-+through that system in reliance on consistent application of that
-+system; it is up to the author/donor to decide if he or she is willing
-+to distribute software through any other system and a licensee cannot
-+impose that choice.
-+
-+This section is intended to make thoroughly clear what is believed to
-+be a consequence of the rest of this License.
-+
-+ 8. If the distribution and/or use of the Program is restricted in
-+certain countries either by patents or by copyrighted interfaces, the
-+original copyright holder who places the Program under this License
-+may add an explicit geographical distribution limitation excluding
-+those countries, so that distribution is permitted only in or among
-+countries not thus excluded. In such case, this License incorporates
-+the limitation as if written in the body of this License.
-+
-+ 9. The Free Software Foundation may publish revised and/or new versions
-+of the General Public License from time to time. Such new versions will
-+be similar in spirit to the present version, but may differ in detail to
-+address new problems or concerns.
-+
-+Each version is given a distinguishing version number. If the Program
-+specifies a version number of this License which applies to it and "any
-+later version", you have the option of following the terms and conditions
-+either of that version or of any later version published by the Free
-+Software Foundation. If the Program does not specify a version number of
-+this License, you may choose any version ever published by the Free Software
-+Foundation.
-+
-+ 10. If you wish to incorporate parts of the Program into other free
-+programs whose distribution conditions are different, write to the author
-+to ask for permission. For software which is copyrighted by the Free
-+Software Foundation, write to the Free Software Foundation; we sometimes
-+make exceptions for this. Our decision will be guided by the two goals
-+of preserving the free status of all derivatives of our free software and
-+of promoting the sharing and reuse of software generally.
-+
-+ NO WARRANTY
-+
-+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-+REPAIR OR CORRECTION.
-+
-+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-+POSSIBILITY OF SUCH DAMAGES.
-+
-+ END OF TERMS AND CONDITIONS
-+
-+ How to Apply These Terms to Your New Programs
-+
-+ If you develop a new program, and you want it to be of the greatest
-+possible use to the public, the best way to achieve this is to make it
-+free software which everyone can redistribute and change under these terms.
-+
-+ To do so, attach the following notices to the program. It is safest
-+to attach them to the start of each source file to most effectively
-+convey the exclusion of warranty; and each file should have at least
-+the "copyright" line and a pointer to where the full notice is found.
-+
-+ <one line to give the program's name and a brief idea of what it does.>
-+ Copyright (C) <year> <name of author>
-+
-+ This program is free software; you can redistribute it and/or modify
-+ it under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 2 of the License, or
-+ (at your option) any later version.
-+
-+ This program is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ GNU General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-+
-+Also add information on how to contact you by electronic and paper mail.
-+
-+If the program is interactive, make it output a short notice like this
-+when it starts in an interactive mode:
-+
-+ Gnomovision version 69, Copyright (C) year name of author
-+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-+ This is free software, and you are welcome to redistribute it
-+ under certain conditions; type `show c' for details.
-+
-+The hypothetical commands `show w' and `show c' should show the appropriate
-+parts of the General Public License. Of course, the commands you use may
-+be called something other than `show w' and `show c'; they could even be
-+mouse-clicks or menu items--whatever suits your program.
-+
-+You should also get your employer (if you work as a programmer) or your
-+school, if any, to sign a "copyright disclaimer" for the program, if
-+necessary. Here is a sample; alter the names:
-+
-+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
-+
-+ <signature of Ty Coon>, 1 April 1989
-+ Ty Coon, President of Vice
-+
-+This General Public License does not permit incorporating your program into
-+proprietary programs. If your program is a subroutine library, you may
-+consider it more useful to permit linking proprietary applications with the
-+library. If this is what you want to do, use the GNU Lesser General
-+Public License instead of this License.
diff --git a/poky/meta/recipes-bsp/keymaps/files/keymap.sh b/poky/meta/recipes-bsp/keymaps/files/keymap.sh
index 6ebc634266..26bda60408 100755
--- a/poky/meta/recipes-bsp/keymaps/files/keymap.sh
+++ b/poky/meta/recipes-bsp/keymaps/files/keymap.sh
@@ -1,6 +1,9 @@
#!/bin/sh
#
# load keymap, if existing
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
KERNEL_MAJMIN=`uname -r | cut -d '.' -f 1,2`
if [ -e /etc/keymap-$KERNEL_MAJMIN.map ]; then
diff --git a/poky/meta/recipes-bsp/keymaps/keymaps_1.0.bb b/poky/meta/recipes-bsp/keymaps/keymaps_1.0.bb
index 020328b3ca..84d09cb965 100644
--- a/poky/meta/recipes-bsp/keymaps/keymaps_1.0.bb
+++ b/poky/meta/recipes-bsp/keymaps/keymaps_1.0.bb
@@ -5,7 +5,7 @@ SECTION = "base"
RDEPENDS:${PN} = "kbd"
LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+LIC_FILES_CHKSUM = "file://keymap.sh;beginline=5;endline=5;md5=829e563511c9a1d6d41f17a7a4989d6a"
PACKAGE_ARCH = "${MACHINE_ARCH}"
PR = "r31"
@@ -20,8 +20,7 @@ python __anonymous() {
inherit update-rc.d
-SRC_URI = "file://keymap.sh \
- file://GPLv2.patch"
+SRC_URI = "file://keymap.sh"
INITSCRIPT_NAME = "keymap.sh"
INITSCRIPT_PARAMS = "start 01 S ."
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/GPLv2.patch b/poky/meta/recipes-core/initscripts/initscripts-1.0/GPLv2.patch
deleted file mode 100644
index 1ee8181f12..0000000000
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/GPLv2.patch
+++ /dev/null
@@ -1,347 +0,0 @@
-Upstream-Status: Inappropriate [licensing]
-
-diff --git a/COPYING b/COPYING
-new file mode 100644
-index 0000000..d511905
---- /dev/null
-+++ b/COPYING
-@@ -0,0 +1,339 @@
-+ GNU GENERAL PUBLIC LICENSE
-+ Version 2, June 1991
-+
-+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
-+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ Everyone is permitted to copy and distribute verbatim copies
-+ of this license document, but changing it is not allowed.
-+
-+ Preamble
-+
-+ The licenses for most software are designed to take away your
-+freedom to share and change it. By contrast, the GNU General Public
-+License is intended to guarantee your freedom to share and change free
-+software--to make sure the software is free for all its users. This
-+General Public License applies to most of the Free Software
-+Foundation's software and to any other program whose authors commit to
-+using it. (Some other Free Software Foundation software is covered by
-+the GNU Lesser General Public License instead.) You can apply it to
-+your programs, too.
-+
-+ When we speak of free software, we are referring to freedom, not
-+price. Our General Public Licenses are designed to make sure that you
-+have the freedom to distribute copies of free software (and charge for
-+this service if you wish), that you receive source code or can get it
-+if you want it, that you can change the software or use pieces of it
-+in new free programs; and that you know you can do these things.
-+
-+ To protect your rights, we need to make restrictions that forbid
-+anyone to deny you these rights or to ask you to surrender the rights.
-+These restrictions translate to certain responsibilities for you if you
-+distribute copies of the software, or if you modify it.
-+
-+ For example, if you distribute copies of such a program, whether
-+gratis or for a fee, you must give the recipients all the rights that
-+you have. You must make sure that they, too, receive or can get the
-+source code. And you must show them these terms so they know their
-+rights.
-+
-+ We protect your rights with two steps: (1) copyright the software, and
-+(2) offer you this license which gives you legal permission to copy,
-+distribute and/or modify the software.
-+
-+ Also, for each author's protection and ours, we want to make certain
-+that everyone understands that there is no warranty for this free
-+software. If the software is modified by someone else and passed on, we
-+want its recipients to know that what they have is not the original, so
-+that any problems introduced by others will not reflect on the original
-+authors' reputations.
-+
-+ Finally, any free program is threatened constantly by software
-+patents. We wish to avoid the danger that redistributors of a free
-+program will individually obtain patent licenses, in effect making the
-+program proprietary. To prevent this, we have made it clear that any
-+patent must be licensed for everyone's free use or not licensed at all.
-+
-+ The precise terms and conditions for copying, distribution and
-+modification follow.
-+
-+ GNU GENERAL PUBLIC LICENSE
-+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-+
-+ 0. This License applies to any program or other work which contains
-+a notice placed by the copyright holder saying it may be distributed
-+under the terms of this General Public License. The "Program", below,
-+refers to any such program or work, and a "work based on the Program"
-+means either the Program or any derivative work under copyright law:
-+that is to say, a work containing the Program or a portion of it,
-+either verbatim or with modifications and/or translated into another
-+language. (Hereinafter, translation is included without limitation in
-+the term "modification".) Each licensee is addressed as "you".
-+
-+Activities other than copying, distribution and modification are not
-+covered by this License; they are outside its scope. The act of
-+running the Program is not restricted, and the output from the Program
-+is covered only if its contents constitute a work based on the
-+Program (independent of having been made by running the Program).
-+Whether that is true depends on what the Program does.
-+
-+ 1. You may copy and distribute verbatim copies of the Program's
-+source code as you receive it, in any medium, provided that you
-+conspicuously and appropriately publish on each copy an appropriate
-+copyright notice and disclaimer of warranty; keep intact all the
-+notices that refer to this License and to the absence of any warranty;
-+and give any other recipients of the Program a copy of this License
-+along with the Program.
-+
-+You may charge a fee for the physical act of transferring a copy, and
-+you may at your option offer warranty protection in exchange for a fee.
-+
-+ 2. You may modify your copy or copies of the Program or any portion
-+of it, thus forming a work based on the Program, and copy and
-+distribute such modifications or work under the terms of Section 1
-+above, provided that you also meet all of these conditions:
-+
-+ a) You must cause the modified files to carry prominent notices
-+ stating that you changed the files and the date of any change.
-+
-+ b) You must cause any work that you distribute or publish, that in
-+ whole or in part contains or is derived from the Program or any
-+ part thereof, to be licensed as a whole at no charge to all third
-+ parties under the terms of this License.
-+
-+ c) If the modified program normally reads commands interactively
-+ when run, you must cause it, when started running for such
-+ interactive use in the most ordinary way, to print or display an
-+ announcement including an appropriate copyright notice and a
-+ notice that there is no warranty (or else, saying that you provide
-+ a warranty) and that users may redistribute the program under
-+ these conditions, and telling the user how to view a copy of this
-+ License. (Exception: if the Program itself is interactive but
-+ does not normally print such an announcement, your work based on
-+ the Program is not required to print an announcement.)
-+
-+These requirements apply to the modified work as a whole. If
-+identifiable sections of that work are not derived from the Program,
-+and can be reasonably considered independent and separate works in
-+themselves, then this License, and its terms, do not apply to those
-+sections when you distribute them as separate works. But when you
-+distribute the same sections as part of a whole which is a work based
-+on the Program, the distribution of the whole must be on the terms of
-+this License, whose permissions for other licensees extend to the
-+entire whole, and thus to each and every part regardless of who wrote it.
-+
-+Thus, it is not the intent of this section to claim rights or contest
-+your rights to work written entirely by you; rather, the intent is to
-+exercise the right to control the distribution of derivative or
-+collective works based on the Program.
-+
-+In addition, mere aggregation of another work not based on the Program
-+with the Program (or with a work based on the Program) on a volume of
-+a storage or distribution medium does not bring the other work under
-+the scope of this License.
-+
-+ 3. You may copy and distribute the Program (or a work based on it,
-+under Section 2) in object code or executable form under the terms of
-+Sections 1 and 2 above provided that you also do one of the following:
-+
-+ a) Accompany it with the complete corresponding machine-readable
-+ source code, which must be distributed under the terms of Sections
-+ 1 and 2 above on a medium customarily used for software interchange; or,
-+
-+ b) Accompany it with a written offer, valid for at least three
-+ years, to give any third party, for a charge no more than your
-+ cost of physically performing source distribution, a complete
-+ machine-readable copy of the corresponding source code, to be
-+ distributed under the terms of Sections 1 and 2 above on a medium
-+ customarily used for software interchange; or,
-+
-+ c) Accompany it with the information you received as to the offer
-+ to distribute corresponding source code. (This alternative is
-+ allowed only for noncommercial distribution and only if you
-+ received the program in object code or executable form with such
-+ an offer, in accord with Subsection b above.)
-+
-+The source code for a work means the preferred form of the work for
-+making modifications to it. For an executable work, complete source
-+code means all the source code for all modules it contains, plus any
-+associated interface definition files, plus the scripts used to
-+control compilation and installation of the executable. However, as a
-+special exception, the source code distributed need not include
-+anything that is normally distributed (in either source or binary
-+form) with the major components (compiler, kernel, and so on) of the
-+operating system on which the executable runs, unless that component
-+itself accompanies the executable.
-+
-+If distribution of executable or object code is made by offering
-+access to copy from a designated place, then offering equivalent
-+access to copy the source code from the same place counts as
-+distribution of the source code, even though third parties are not
-+compelled to copy the source along with the object code.
-+
-+ 4. You may not copy, modify, sublicense, or distribute the Program
-+except as expressly provided under this License. Any attempt
-+otherwise to copy, modify, sublicense or distribute the Program is
-+void, and will automatically terminate your rights under this License.
-+However, parties who have received copies, or rights, from you under
-+this License will not have their licenses terminated so long as such
-+parties remain in full compliance.
-+
-+ 5. You are not required to accept this License, since you have not
-+signed it. However, nothing else grants you permission to modify or
-+distribute the Program or its derivative works. These actions are
-+prohibited by law if you do not accept this License. Therefore, by
-+modifying or distributing the Program (or any work based on the
-+Program), you indicate your acceptance of this License to do so, and
-+all its terms and conditions for copying, distributing or modifying
-+the Program or works based on it.
-+
-+ 6. Each time you redistribute the Program (or any work based on the
-+Program), the recipient automatically receives a license from the
-+original licensor to copy, distribute or modify the Program subject to
-+these terms and conditions. You may not impose any further
-+restrictions on the recipients' exercise of the rights granted herein.
-+You are not responsible for enforcing compliance by third parties to
-+this License.
-+
-+ 7. If, as a consequence of a court judgment or allegation of patent
-+infringement or for any other reason (not limited to patent issues),
-+conditions are imposed on you (whether by court order, agreement or
-+otherwise) that contradict the conditions of this License, they do not
-+excuse you from the conditions of this License. If you cannot
-+distribute so as to satisfy simultaneously your obligations under this
-+License and any other pertinent obligations, then as a consequence you
-+may not distribute the Program at all. For example, if a patent
-+license would not permit royalty-free redistribution of the Program by
-+all those who receive copies directly or indirectly through you, then
-+the only way you could satisfy both it and this License would be to
-+refrain entirely from distribution of the Program.
-+
-+If any portion of this section is held invalid or unenforceable under
-+any particular circumstance, the balance of the section is intended to
-+apply and the section as a whole is intended to apply in other
-+circumstances.
-+
-+It is not the purpose of this section to induce you to infringe any
-+patents or other property right claims or to contest validity of any
-+such claims; this section has the sole purpose of protecting the
-+integrity of the free software distribution system, which is
-+implemented by public license practices. Many people have made
-+generous contributions to the wide range of software distributed
-+through that system in reliance on consistent application of that
-+system; it is up to the author/donor to decide if he or she is willing
-+to distribute software through any other system and a licensee cannot
-+impose that choice.
-+
-+This section is intended to make thoroughly clear what is believed to
-+be a consequence of the rest of this License.
-+
-+ 8. If the distribution and/or use of the Program is restricted in
-+certain countries either by patents or by copyrighted interfaces, the
-+original copyright holder who places the Program under this License
-+may add an explicit geographical distribution limitation excluding
-+those countries, so that distribution is permitted only in or among
-+countries not thus excluded. In such case, this License incorporates
-+the limitation as if written in the body of this License.
-+
-+ 9. The Free Software Foundation may publish revised and/or new versions
-+of the General Public License from time to time. Such new versions will
-+be similar in spirit to the present version, but may differ in detail to
-+address new problems or concerns.
-+
-+Each version is given a distinguishing version number. If the Program
-+specifies a version number of this License which applies to it and "any
-+later version", you have the option of following the terms and conditions
-+either of that version or of any later version published by the Free
-+Software Foundation. If the Program does not specify a version number of
-+this License, you may choose any version ever published by the Free Software
-+Foundation.
-+
-+ 10. If you wish to incorporate parts of the Program into other free
-+programs whose distribution conditions are different, write to the author
-+to ask for permission. For software which is copyrighted by the Free
-+Software Foundation, write to the Free Software Foundation; we sometimes
-+make exceptions for this. Our decision will be guided by the two goals
-+of preserving the free status of all derivatives of our free software and
-+of promoting the sharing and reuse of software generally.
-+
-+ NO WARRANTY
-+
-+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-+REPAIR OR CORRECTION.
-+
-+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-+POSSIBILITY OF SUCH DAMAGES.
-+
-+ END OF TERMS AND CONDITIONS
-+
-+ How to Apply These Terms to Your New Programs
-+
-+ If you develop a new program, and you want it to be of the greatest
-+possible use to the public, the best way to achieve this is to make it
-+free software which everyone can redistribute and change under these terms.
-+
-+ To do so, attach the following notices to the program. It is safest
-+to attach them to the start of each source file to most effectively
-+convey the exclusion of warranty; and each file should have at least
-+the "copyright" line and a pointer to where the full notice is found.
-+
-+ <one line to give the program's name and a brief idea of what it does.>
-+ Copyright (C) <year> <name of author>
-+
-+ This program is free software; you can redistribute it and/or modify
-+ it under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 2 of the License, or
-+ (at your option) any later version.
-+
-+ This program is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ GNU General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-+
-+Also add information on how to contact you by electronic and paper mail.
-+
-+If the program is interactive, make it output a short notice like this
-+when it starts in an interactive mode:
-+
-+ Gnomovision version 69, Copyright (C) year name of author
-+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-+ This is free software, and you are welcome to redistribute it
-+ under certain conditions; type `show c' for details.
-+
-+The hypothetical commands `show w' and `show c' should show the appropriate
-+parts of the General Public License. Of course, the commands you use may
-+be called something other than `show w' and `show c'; they could even be
-+mouse-clicks or menu items--whatever suits your program.
-+
-+You should also get your employer (if you work as a programmer) or your
-+school, if any, to sign a "copyright disclaimer" for the program, if
-+necessary. Here is a sample; alter the names:
-+
-+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
-+
-+ <signature of Ty Coon>, 1 April 1989
-+ Ty Coon, President of Vice
-+
-+This General Public License does not permit incorporating your program into
-+proprietary programs. If your program is a subroutine library, you may
-+consider it more useful to permit linking proprietary applications with the
-+library. If this is what you want to do, use the GNU Lesser General
-+Public License instead of this License.
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/alignment.sh b/poky/meta/recipes-core/initscripts/initscripts-1.0/alignment.sh
index b577b9a03a..f9eb9fc5ca 100644
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/alignment.sh
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/alignment.sh
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: alignment
# Required-Start: mountkernfs
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/banner.sh b/poky/meta/recipes-core/initscripts/initscripts-1.0/banner.sh
index 9e2b091252..dd3dd9d4fc 100644
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/banner.sh
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/banner.sh
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: banner
# Required-Start:
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh b/poky/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh
index 591591f87f..6068a8c07f 100755
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/bootmisc.sh
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: bootmisc
# Required-Start: $local_fs mountvirtfs
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/checkfs.sh b/poky/meta/recipes-core/initscripts/initscripts-1.0/checkfs.sh
index 62869451b7..f7a61d8b53 100755
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/checkfs.sh
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/checkfs.sh
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: checkfs
# Required-Start: checkroot
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/checkroot.sh b/poky/meta/recipes-core/initscripts/initscripts-1.0/checkroot.sh
index a63e71b780..1c7057b0f1 100755
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/checkroot.sh
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/checkroot.sh
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: checkroot
# Required-Start: udev
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/devpts.sh b/poky/meta/recipes-core/initscripts/initscripts-1.0/devpts.sh
index c6043fb1e6..ad5182d3e1 100755
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/devpts.sh
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/devpts.sh
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: devpts
# Required-Start: udev
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/dmesg.sh b/poky/meta/recipes-core/initscripts/initscripts-1.0/dmesg.sh
index 2b9eba64cf..07ee533432 100755
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/dmesg.sh
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/dmesg.sh
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: dmesg
# Required-Start:
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/functions b/poky/meta/recipes-core/initscripts/initscripts-1.0/functions
index 01ad1edd3e..35aebd4a55 100755
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/functions
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/functions
@@ -3,6 +3,9 @@
# functions This file contains functions to be used by most or all
# shell scripts in the /etc/init.d directory.
#
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
NORMAL="\\033[0;39m" # Standard console grey
SUCCESS="\\033[1;32m" # Success is green
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/halt b/poky/meta/recipes-core/initscripts/initscripts-1.0/halt
index a56f73421b..ba967c7650 100755
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/halt
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/halt
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: halt
# Required-Start:
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/hostname.sh b/poky/meta/recipes-core/initscripts/initscripts-1.0/hostname.sh
index 95287cc139..740f75cb41 100755
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/hostname.sh
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/hostname.sh
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: hostname
# Required-Start:
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/mountall.sh b/poky/meta/recipes-core/initscripts/initscripts-1.0/mountall.sh
index 2839d57cbe..e87b291d4e 100755
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/mountall.sh
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/mountall.sh
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: mountall
# Required-Start: mountvirtfs
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/mountnfs.sh b/poky/meta/recipes-core/initscripts/initscripts-1.0/mountnfs.sh
index be9f5970fa..c08597e725 100755
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/mountnfs.sh
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/mountnfs.sh
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: mountnfs
# Required-Start: $local_fs $network $rpcbind
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/populate-volatile.sh b/poky/meta/recipes-core/initscripts/initscripts-1.0/populate-volatile.sh
index b56b72f833..bc630e871c 100755
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/populate-volatile.sh
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/populate-volatile.sh
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: volatile
# Required-Start: $local_fs
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/read-only-rootfs-hook.sh b/poky/meta/recipes-core/initscripts/initscripts-1.0/read-only-rootfs-hook.sh
index bd445ddb07..6706a117f7 100644
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/read-only-rootfs-hook.sh
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/read-only-rootfs-hook.sh
@@ -1,4 +1,7 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
. /etc/default/rcS
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/reboot b/poky/meta/recipes-core/initscripts/initscripts-1.0/reboot
index 087d8d5da4..91e3972ed9 100755
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/reboot
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/reboot
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: reboot
# Required-Start:
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/rmnologin.sh b/poky/meta/recipes-core/initscripts/initscripts-1.0/rmnologin.sh
index 76de3418ac..0bbaee7a9d 100755
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/rmnologin.sh
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/rmnologin.sh
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: rmnologin
# Required-Start: $remote_fs $all
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/save-rtc.sh b/poky/meta/recipes-core/initscripts/initscripts-1.0/save-rtc.sh
index ffa1eee43d..e1e39345b7 100644
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/save-rtc.sh
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/save-rtc.sh
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: save-rtc
# Required-Start:
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/sendsigs b/poky/meta/recipes-core/initscripts/initscripts-1.0/sendsigs
index 34e1b7714b..15dd4bb76f 100755
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/sendsigs
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/sendsigs
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: sendsigs
# Required-Start:
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/single b/poky/meta/recipes-core/initscripts/initscripts-1.0/single
index da82d178a1..1172584170 100755
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/single
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/single
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: single
# Required-Start: $local_fs $all killprocs
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/sushell b/poky/meta/recipes-core/initscripts/initscripts-1.0/sushell
index c319d95bf7..511291db85 100644
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/sushell
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/sushell
@@ -1,4 +1,7 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
[ -z "$SUSHELL" ] && SUSHELL=/bin/sh
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/sysfs.sh b/poky/meta/recipes-core/initscripts/initscripts-1.0/sysfs.sh
index 4871ee94e5..da9ad485c1 100644
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/sysfs.sh
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/sysfs.sh
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: mountvirtfs
# Required-Start:
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/umountfs b/poky/meta/recipes-core/initscripts/initscripts-1.0/umountfs
index 7fb5c58b3e..a8691e570f 100755
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/umountfs
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/umountfs
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: umountfs
# Required-Start:
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/umountnfs.sh b/poky/meta/recipes-core/initscripts/initscripts-1.0/umountnfs.sh
index af075407fd..b91fa05eed 100755
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/umountnfs.sh
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/umountnfs.sh
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: umountnfs
# Required-Start:
diff --git a/poky/meta/recipes-core/initscripts/initscripts-1.0/urandom b/poky/meta/recipes-core/initscripts/initscripts-1.0/urandom
index af1625b5fd..7be92d3b0a 100755
--- a/poky/meta/recipes-core/initscripts/initscripts-1.0/urandom
+++ b/poky/meta/recipes-core/initscripts/initscripts-1.0/urandom
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
### BEGIN INIT INFO
# Provides: urandom
# Required-Start: $local_fs mountvirtfs
diff --git a/poky/meta/recipes-core/initscripts/initscripts_1.0.bb b/poky/meta/recipes-core/initscripts/initscripts_1.0.bb
index 9429e5881d..2244d1b292 100644
--- a/poky/meta/recipes-core/initscripts/initscripts_1.0.bb
+++ b/poky/meta/recipes-core/initscripts/initscripts_1.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/fedora-sysv/initscripts"
DESCRIPTION = "Initscripts provide the basic system startup initialization scripts for the system. These scripts include actions such as filesystem mounting, fsck, RTC manipulation and other actions routinely performed at system startup. In addition, the scripts are also used during system shutdown to reverse the actions performed at startup."
SECTION = "base"
LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+LIC_FILES_CHKSUM = "file://functions;beginline=7;endline=7;md5=829e563511c9a1d6d41f17a7a4989d6a"
PR = "r155"
INHIBIT_DEFAULT_DEPS = "1"
@@ -31,7 +31,6 @@ SRC_URI = "file://functions \
file://read-only-rootfs-hook.sh \
file://volatiles \
file://save-rtc.sh \
- file://GPLv2.patch \
file://dmesg.sh \
file://logrotate-dmesg.conf \
${@bb.utils.contains('DISTRO_FEATURES','selinux','file://sushell','',d)} \
diff --git a/poky/meta/recipes-core/meta/buildtools-tarball.bb b/poky/meta/recipes-core/meta/buildtools-tarball.bb
index fac91cfc3c..f9f36e68c4 100644
--- a/poky/meta/recipes-core/meta/buildtools-tarball.bb
+++ b/poky/meta/recipes-core/meta/buildtools-tarball.bb
@@ -7,13 +7,12 @@ TOOLCHAIN_TARGET_TASK ?= ""
TOOLCHAIN_HOST_TASK ?= "\
nativesdk-sdk-provides-dummy \
- nativesdk-python3-core \
- nativesdk-python3-modules \
- nativesdk-python3-misc \
+ nativesdk-python3 \
nativesdk-python3-git \
nativesdk-python3-jinja2 \
nativesdk-python3-testtools \
nativesdk-python3-subunit \
+ nativesdk-python3-pyyaml \
nativesdk-ncurses-terminfo-base \
nativesdk-chrpath \
nativesdk-tar \
diff --git a/poky/meta/recipes-devtools/cmake/cmake/SDKToolchainConfig.cmake.template b/poky/meta/recipes-devtools/cmake/cmake/SDKToolchainConfig.cmake.template
new file mode 100644
index 0000000000..c69569a843
--- /dev/null
+++ b/poky/meta/recipes-devtools/cmake/cmake/SDKToolchainConfig.cmake.template
@@ -0,0 +1,31 @@
+set(SDK_INSTALL_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..")
+set(HOST_SYSROOT "${SDK_INSTALL_DIR}/sysroots/@OECORE_SDK_SYS")
+set(TARGET_SYSROOT "${SDK_INSTALL_DIR}/sysroots/@OECORE_TARGET_SYS")
+set(HOST_BIN "${HOST_SYSROOT}/usr/bin")
+set(TOOLCHAIN_NAME "@OECORE_TARGET_ALIAS")
+set(GCC_DIR "${HOST_BIN}/${TOOLCHAIN_NAME}")
+
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR "@OECORE_TARGET_ARCH")
+
+set(CMAKE_C_COMPILER "${GCC_DIR}/${TOOLCHAIN_NAME}-gcc")
+set(CMAKE_CXX_COMPILER "${GCC_DIR}/${TOOLCHAIN_NAME}-g++")
+
+set(ARCH_FLAGS "@OECORE_TUNE_CCARGS")
+set(CMAKE_C_FLAGS "${ARCH_FLAGS}" CACHE STRING "" FORCE )
+set(CMAKE_CXX_FLAGS "${ARCH_FLAGS}" CACHE STRING "" FORCE )
+set(CMAKE_ASM_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "" FORCE )
+set(CMAKE_LDFLAGS_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "" FORCE )
+
+set(CMAKE_SYSROOT "${TARGET_SYSROOT}")
+
+set(CMAKE_FIND_ROOT_PATH "${TARGET_SYSROOT}" )
+
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY )
+
+set(CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX "")
+
+set(CMAKE_PROGRAM_PATH "${HOST_SYSROOT}/usr/bin" CACHE STRING "" FORCE)
diff --git a/poky/meta/recipes-devtools/cmake/cmake/cmake-setup.py b/poky/meta/recipes-devtools/cmake/cmake/cmake-setup.py
new file mode 100755
index 0000000000..af587a44cc
--- /dev/null
+++ b/poky/meta/recipes-devtools/cmake/cmake/cmake-setup.py
@@ -0,0 +1,33 @@
+#!/usr/bin/env python3
+
+import os
+import string
+import sys
+
+class Template(string.Template):
+ delimiter = "@"
+
+class Environ():
+ def __getitem__(self, name):
+ if name == "OECORE_SDK_SYS":
+ return os.path.basename(os.environ["OECORE_NATIVE_SYSROOT"])
+ elif name == "OECORE_TARGET_SYS":
+ return os.path.basename(os.environ["OECORE_TARGET_SYSROOT"])
+ elif name == "OECORE_TARGET_ALIAS":
+ return os.path.basename(os.environ["TARGET_PREFIX"].strip("-"))
+ else:
+ return os.environ[name]
+
+try:
+ sysroot = os.environ['OECORE_NATIVE_SYSROOT']
+except KeyError:
+ print("Not in environment setup, bailing")
+ sys.exit(1)
+
+template_file = os.path.join(sysroot, 'usr/share/cmake/SDKToolchainConfig.cmake.template')
+cross_file = os.path.join(sysroot, 'usr/share/cmake/%s-toolchain.cmake' % (os.path.basename(os.environ["OECORE_TARGET_SYSROOT"])))
+with open(template_file) as in_file:
+ template = in_file.read()
+ output = Template(template).substitute(Environ())
+ with open(cross_file, "w") as out_file:
+ out_file.write(output)
diff --git a/poky/meta/recipes-devtools/cmake/cmake_3.22.3.bb b/poky/meta/recipes-devtools/cmake/cmake_3.22.3.bb
index 36c6357dd8..e111dd3c5a 100644
--- a/poky/meta/recipes-devtools/cmake/cmake_3.22.3.bb
+++ b/poky/meta/recipes-devtools/cmake/cmake_3.22.3.bb
@@ -6,6 +6,8 @@ DEPENDS += "curl expat zlib libarchive xz ncurses bzip2"
SRC_URI:append:class-nativesdk = " \
file://OEToolchainConfig.cmake \
+ file://SDKToolchainConfig.cmake.template \
+ file://cmake-setup.py \
file://environment.d-cmake.sh \
file://0001-CMakeDetermineSystem-use-oe-environment-vars-to-load.patch \
"
@@ -42,6 +44,11 @@ do_install:append:class-nativesdk() {
mkdir -p ${D}${SDKPATHNATIVE}/environment-setup.d
install -m 644 ${WORKDIR}/environment.d-cmake.sh ${D}${SDKPATHNATIVE}/environment-setup.d/cmake.sh
+
+ # install cmake-setup.py to create arch-specific toolchain cmake file from template
+ install -m 0644 ${WORKDIR}/SDKToolchainConfig.cmake.template ${D}${datadir}/cmake/
+ install -d ${D}${SDKPATHNATIVE}/post-relocate-setup.d
+ install -m 0755 ${WORKDIR}/cmake-setup.py ${D}${SDKPATHNATIVE}/post-relocate-setup.d/
}
FILES:${PN}:append:class-nativesdk = " ${SDKPATHNATIVE}"
diff --git a/poky/meta/recipes-devtools/git/git_2.35.1.bb b/poky/meta/recipes-devtools/git/git_2.35.1.bb
index 0cff3ce100..47c2211864 100644
--- a/poky/meta/recipes-devtools/git/git_2.35.1.bb
+++ b/poky/meta/recipes-devtools/git/git_2.35.1.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "http://git-scm.com"
DESCRIPTION = "Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency."
SECTION = "console/utils"
LICENSE = "GPL-2.0-only"
-DEPENDS = "openssl curl zlib expat"
+DEPENDS = "openssl zlib"
PROVIDES:append:class-native = " git-replacement-native"
@@ -18,10 +18,12 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=7c0d7ef03a7eb04ce795b0f60e68e7e1"
CVE_PRODUCT = "git-scm:git"
-PACKAGECONFIG ??= ""
+PACKAGECONFIG ??= "expat curl"
PACKAGECONFIG[cvsserver] = ""
PACKAGECONFIG[svn] = ""
PACKAGECONFIG[manpages] = ",,asciidoc-native xmlto-native"
+PACKAGECONFIG[curl] = "--with-curl,--without-curl,curl"
+PACKAGECONFIG[expat] = "--with-expat,--without-expat,expat"
EXTRA_OECONF = "--with-perl=${STAGING_BINDIR_NATIVE}/perl-native/perl \
--without-tcltk \
diff --git a/poky/meta/recipes-devtools/meson/meson/0001-Check-for-clang-before-guessing-gcc-or-lcc.patch b/poky/meta/recipes-devtools/meson/meson/0001-Check-for-clang-before-guessing-gcc-or-lcc.patch
new file mode 100644
index 0000000000..58fa119439
--- /dev/null
+++ b/poky/meta/recipes-devtools/meson/meson/0001-Check-for-clang-before-guessing-gcc-or-lcc.patch
@@ -0,0 +1,56 @@
+From 8739e1c3bef653415ad4b9b9c318ccfa76c43da6 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 31 Mar 2022 15:00:24 -0700
+Subject: [PATCH] Check for clang before guessing gcc or lcc
+
+clang --version can yield a string like below when its installed into
+such a directory
+
+clang version 14.0.0 (https://github.com/llvm/llvm-project 3f43d803382d57e3fc010ca19833077d1023e9c9)
+Target: aarch64-yoe-linux
+Thread model: posix
+InstalledDir: /mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/gnome-text-editor/42.0-r0/recipe-sysroot-native/usr/bin/aarch64-yoe-linux
+
+as you can see InstallDir has 'xt-' subtring and this trips the check to
+guess gcc
+
+if 'Free Software Foundation' in out or 'xt-' in out:
+
+Therefore, check if compiler is clang then there is no point of running
+this check anyway.
+
+Upstream-Status: Submitted [https://github.com/mesonbuild/meson/pull/10218]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ mesonbuild/compilers/detect.py | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+diff --git a/mesonbuild/compilers/detect.py b/mesonbuild/compilers/detect.py
+index 53948b01a..ba335cf39 100644
+--- a/mesonbuild/compilers/detect.py
++++ b/mesonbuild/compilers/detect.py
+@@ -427,13 +427,14 @@ def _detect_c_or_cpp_compiler(env: 'Environment', lang: str, for_machine: Machin
+ version = search_version(out)
+
+ guess_gcc_or_lcc: T.Optional[str] = None
+- if 'Free Software Foundation' in out or 'xt-' in out:
+- guess_gcc_or_lcc = 'gcc'
+- if 'e2k' in out and 'lcc' in out:
+- guess_gcc_or_lcc = 'lcc'
+- if 'Microchip Technology' in out:
+- # this output has "Free Software Foundation" in its version
+- guess_gcc_or_lcc = None
++ if not 'clang' in compiler_name:
++ if 'Free Software Foundation' in out or 'xt-' in out:
++ guess_gcc_or_lcc = 'gcc'
++ if 'e2k' in out and 'lcc' in out:
++ guess_gcc_or_lcc = 'lcc'
++ if 'Microchip Technology' in out:
++ # this output has "Free Software Foundation" in its version
++ guess_gcc_or_lcc = None
+
+ if guess_gcc_or_lcc:
+ defines = _get_gnu_compiler_defines(compiler)
+--
+2.35.1
+
diff --git a/poky/meta/recipes-devtools/meson/meson_0.61.3.bb b/poky/meta/recipes-devtools/meson/meson_0.61.3.bb
index 92f99a902d..1c21493f82 100644
--- a/poky/meta/recipes-devtools/meson/meson_0.61.3.bb
+++ b/poky/meta/recipes-devtools/meson/meson_0.61.3.bb
@@ -15,6 +15,7 @@ SRC_URI = "https://github.com/mesonbuild/meson/releases/download/${PV}/meson-${P
file://0001-Make-CPU-family-warnings-fatal.patch \
file://0002-Support-building-allarch-recipes-again.patch \
file://0001-is_debianlike-always-return-False.patch \
+ file://0001-Check-for-clang-before-guessing-gcc-or-lcc.patch \
"
SRC_URI[sha256sum] = "9c884434469471f3fe0cbbceb9b9ea0c8047f19e792940e1df6595741aae251b"
diff --git a/poky/meta/recipes-devtools/python/python3_3.10.3.bb b/poky/meta/recipes-devtools/python/python3_3.10.4.bb
index 5c0f0a9eb2..522f0d71ee 100644
--- a/poky/meta/recipes-devtools/python/python3_3.10.3.bb
+++ b/poky/meta/recipes-devtools/python/python3_3.10.4.bb
@@ -40,7 +40,7 @@ SRC_URI:append:class-native = " \
file://12-distutils-prefix-is-inside-staging-area.patch \
file://0001-Don-t-search-system-for-headers-libraries.patch \
"
-SRC_URI[sha256sum] = "596c72de998dc39205bc4f70ef0dbf7edec740a306d09b49a9bd0a77806730dc"
+SRC_URI[sha256sum] = "80bf925f571da436b35210886cf79f6eb5fa5d6c571316b73568343451f77a19"
# exclude pre-releases for both python 2.x and 3.x
UPSTREAM_CHECK_REGEX = "[Pp]ython-(?P<pver>\d+(\.\d+)+).tar"
diff --git a/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-g-ir-tool-template.in-fix-girdir-path.patch b/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-g-ir-tool-template.in-fix-girdir-path.patch
new file mode 100644
index 0000000000..5c78649de4
--- /dev/null
+++ b/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-g-ir-tool-template.in-fix-girdir-path.patch
@@ -0,0 +1,33 @@
+From b01b448613b76f9acefdfd89ee01686dc7a67df4 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Tue, 13 Jul 2021 02:05:11 -0700
+Subject: [PATCH] g-ir-tool-template.in: fix girdir path
+
+In case gir_dir_prefix is set, it's possible that g-ir-scanner
+cannot find the .gir files. This is because that the girdir
+is set to gir_dir_prefix, which is wrong. It's not a prefix,
+it the actual gir dir.
+
+Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/gobject-introspection/-/merge_requests/329]
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ tools/g-ir-tool-template.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/g-ir-tool-template.in b/tools/g-ir-tool-template.in
+index 6e98f52e..62c07c31 100755
+--- a/tools/g-ir-tool-template.in
++++ b/tools/g-ir-tool-template.in
+@@ -55,7 +55,7 @@ builtins.__dict__['DATADIR'] = datadir
+
+ # Respect gir_dir_prefix
+ girdir = ''
+-girdir = os.path.abspath(os.path.join(filedir, '..', '@gir_dir_prefix@'))
++girdir = os.path.abspath(os.path.join(filedir, '..', '@gir_dir_prefix@', 'gir-1.0'))
+ builtins.__dict__['GIRDIR'] = [girdir]
+
+ # Again, relative paths first so that the installation prefix is relocatable
+--
+2.30.2
+
diff --git a/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.72.0.bb b/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.72.0.bb
index 39475daf2e..355e77d107 100644
--- a/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.72.0.bb
+++ b/poky/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.72.0.bb
@@ -13,7 +13,9 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=c434e8128a68bedd59b80b2ac1eb1c4a \
file://girepository/giregisteredtypeinfo.c;endline=21;md5=661847611ae6979465415f31a759ba27 \
"
-SRC_URI = "${GNOME_MIRROR}/${BPN}/${@oe.utils.trim_version("${PV}", 2)}/${BPN}-${PV}.tar.xz"
+SRC_URI = "${GNOME_MIRROR}/${BPN}/${@oe.utils.trim_version("${PV}", 2)}/${BPN}-${PV}.tar.xz \
+ file://0001-g-ir-tool-template.in-fix-girdir-path.patch \
+ "
SRC_URI[sha256sum] = "02fe8e590861d88f83060dd39cda5ccaa60b2da1d21d0f95499301b186beaabc"
diff --git a/poky/meta/recipes-graphics/wayland/weston_10.0.0.bb b/poky/meta/recipes-graphics/wayland/weston_10.0.0.bb
index 8424b4d548..93f7b59659 100644
--- a/poky/meta/recipes-graphics/wayland/weston_10.0.0.bb
+++ b/poky/meta/recipes-graphics/wayland/weston_10.0.0.bb
@@ -45,6 +45,9 @@ PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'kms wayla
shell-fullscreen \
shell-ivi"
+# Can be 'damage', 'im', 'egl', 'shm', 'touch', 'dmabuf-feedback', 'dmabuf-v4l', 'dmabuf-egl' or 'all'
+SIMPLECLIENTS ?= "all"
+
#
# Compositor choices
#
@@ -77,7 +80,7 @@ PACKAGECONFIG[xwayland] = "-Dxwayland=true,-Dxwayland=false"
# colord CMS support
PACKAGECONFIG[colord] = "-Dcolor-management-colord=true,-Dcolor-management-colord=false,colord"
# Clients support
-PACKAGECONFIG[clients] = "-Dsimple-clients=all -Ddemo-clients=true,-Dsimple-clients= -Ddemo-clients=false"
+PACKAGECONFIG[clients] = "-Dsimple-clients=${SIMPLECLIENTS} -Ddemo-clients=true,-Dsimple-clients= -Ddemo-clients=false"
# Virtual remote output with GStreamer on DRM backend
PACKAGECONFIG[remoting] = "-Dremoting=true,-Dremoting=false,gstreamer1.0 gstreamer1.0-plugins-base"
# Weston with screen-share support
diff --git a/poky/meta/recipes-kernel/modutils-initscripts/files/PD.patch b/poky/meta/recipes-kernel/modutils-initscripts/files/PD.patch
deleted file mode 100644
index 21ac49cbd8..0000000000
--- a/poky/meta/recipes-kernel/modutils-initscripts/files/PD.patch
+++ /dev/null
@@ -1,8 +0,0 @@
-Upstream-Status: Inappropriate [licensing]
-
-Index: modutils-initscripts-1.0/LICENSE
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ modutils-initscripts-1.0/LICENSE 2010-12-06 14:26:03.570339002 -0800
-@@ -0,0 +1 @@
-+Public Domain
diff --git a/poky/meta/recipes-kernel/modutils-initscripts/files/modutils.sh b/poky/meta/recipes-kernel/modutils-initscripts/files/modutils.sh
index 67e1dcd990..e9aaa66cb7 100755
--- a/poky/meta/recipes-kernel/modutils-initscripts/files/modutils.sh
+++ b/poky/meta/recipes-kernel/modutils-initscripts/files/modutils.sh
@@ -1,4 +1,8 @@
#!/bin/sh
+#
+# SPDX-License-Identifier: MIT
+#
+
### BEGIN INIT INFO
# Provides: module-init-tools
# Required-Start:
diff --git a/poky/meta/recipes-kernel/modutils-initscripts/modutils-initscripts.bb b/poky/meta/recipes-kernel/modutils-initscripts/modutils-initscripts.bb
index aa71309126..8f4fdd76bf 100644
--- a/poky/meta/recipes-kernel/modutils-initscripts/modutils-initscripts.bb
+++ b/poky/meta/recipes-kernel/modutils-initscripts/modutils-initscripts.bb
@@ -1,9 +1,8 @@
SUMMARY = "Initscript for auto-loading kernel modules on boot"
SECTION = "base"
-LICENSE = "PD"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=7bf87fc37976e93ec66ad84fac58c098"
-SRC_URI = "file://modutils.sh \
- file://PD.patch"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://modutils.sh;beginline=3;endline=3;md5=b2dccaa94b3629a08bfb4f983cad6f89"
+SRC_URI = "file://modutils.sh"
PR = "r7"
diff --git a/poky/scripts/contrib/convert-variable-renames.py b/poky/scripts/contrib/convert-variable-renames.py
index 856c001e11..eded90ca61 100755
--- a/poky/scripts/contrib/convert-variable-renames.py
+++ b/poky/scripts/contrib/convert-variable-renames.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
#
# Conversion script to rename variables to versions with improved terminology.
-# Also highlights potentially problematic langage and removed variables.
+# Also highlights potentially problematic language and removed variables.
#
# Copyright (C) 2021 Richard Purdie
# Copyright (C) 2022 Wind River Systems, Inc.